33. 自定义线程

Posted 江小白谢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了33. 自定义线程相关的知识,希望对你有一定的参考价值。

1.进程

定义:正在进行的程序叫作一个进程。进程负责了内存空间的划分

疑问:windows号称是多任务的操作系统,那么是同时运行多个程序的吗?

  从宏观角度:windows确实是同时运行多个应用程序

  从微观角度:cpu做了快速的切换动作,只是太快了,我们肉眼看不出切换而已

 

2.线程

定义:线程在一个进程中负责了代码的执行,就是一个进程的路径

 

3.多线程

定义:在一个进程中有多个线程在执行不同的代码。

 

疑问:按照上面的定义,那我们之前的程序为什么可以执行了?

   原来当我们运行程序的时候jvm会创建一个main线程执行main方法中的代码

注意:一个java中至少有2个线程,一个是mian线程,一个执行垃圾回收器

多线程的好处:

      1. 解决了一个进程执行多个任务的难题

      2. 提高了资源的利用率(而不是提高了效率)

多线程的坏处:

      1.增加了cpu的负担

      2.降低了一个线程的执行率

      3.引出了线程安全问提

      4.出现了死锁现象

 

4.创建线程

方式一:

    1.自定义一个类继承Thread类

    2.重写run方法

      疑问:为什么我们要重写父类的run方法呢?(run方法就是线程要执行的代码)

        原来每一个线程都有自己的任务代码,比如main线程就执行main方法里面的代码,

        而我们定义的线程,当然要执行自己的任务代码,所以我们就把任务代码写在run方法里面

    3.创建Thread线程的子类对象并调用start方法

      疑问:为什么我们要调用start方法才能开启自定义的线程呢?我并没有定义start方法啊?

        原来,我们用子对象调用start方法,其实是调用Thread类的start方法,并且让start的方法调用run方法

    注意:不要直接调用run方法,如果直接调用run方法,那么就相当于调用了一个普通的方法,并没开启线程

 

下面是一个线程的Demo,可以看出来cpu是在主线程和自定义线程中切换执行的。

class sonThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("我是自定义线程");
        }
    }
}

public class Demo3 {
    public static void main(String[] args) {
        
        sonThread sonthread = new sonThread();
        sonthread.start();
        for (int i = 0; i < 100; i++) {
            System.out.println("我是main线程");
        }
    }
}

 

 

5.线程的生命周期

 

以上是关于33. 自定义线程的主要内容,如果未能解决你的问题,请参考以下文章

从android中的片段更改自定义ActionBar标题

VSCode自定义代码片段——CSS选择器

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段(vue主模板)

VSCode自定义代码片段——声明函数

VSCode自定义代码片段——.vue文件的模板