多线程相关概念

相关概念

  • 进程:启动一个应用程序,就会开启一个进程(微信,QQ,浏览器等等)

  • 线程:程序的执行路径

  • 进程和线程的区别:进程是在操作系统下的并发,线程是在应用程序下的并发

  • 多线程:在同一进程中开启了多个不同的执行路径,多个路径同时执行

  • 多线程好处:提高程序整体运行速度,快速响应

  • 多线程的应用场景:

    • 异步发送短信
    • 异步记录日志
    • 对耗时代码采用异步处理
  • CPU切换:

    单核CPU:同一时刻只有一个线程可以工作,线程上下文切换耗费资源

    多核CPU:同一时刻多个线程同时工作,上下文切换较少

  • 多线程越多越好?

    小型项目:使用多线程异步

    大型项目:使用MQ代替多线程

  • 用户线程和守护线程的区别:

    • 用户线程当主线程停止后,用户线程也会一直运行。thread.setDaemon(false);

    • 而守护线程当我们主线程停止后,守护线程也会停止。thread.setDaemon(true);

停止线程的方式

建议采用变量的方式停止线程

public class Thread005 extends Thread {
    private volatile boolean flag = true;

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
        while (flag) {

        }
    }

    public void stopThread() {
        this.flag = false;
    }


    public static void main(String[] args) {
        Thread005 thread005 = new Thread005();
        thread005.start();
        try {
            Thread.sleep(3000);
            thread005.stopThread();
        } catch (Exception e) {

        }
    }
}

多线程的5种状态

  • 新建一个线程,new Thread的时候为新建的状态
  • 调用到start方法的时候,当前线程状态为就绪状态,需要等待cpu的切换。
  • 当cpu切换能够调用到该线程的时候,当前线程的状态为运行状态。
  • 在线程调用sleep方法的时候,当前线程线程的状态为阻塞状态,当休眠的时候过了的时候有需要从新等待cpu调度,从就绪状态到运行。
  • 当线程调用stop方法或者run方法代码执行结束的时候当前线程的状态为死亡状态。

image-20200806115931281

join方法

当在主线程当中执行到t1.join()方法时,就认为主线程应该把执行权让给t1

class  Main
{
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <10 ; i++) {
                    System.out.println("子线程...");
                }
            }
        });

        thread.start();

        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        for (int i = 0; i <10 ; i++) {
            System.out.println("main线程.....");
        }

        System.out.println("主线程销毁....");

    }
}
posted @ 2020-08-07 17:20  笑谈渴饮匈奴血  阅读(196)  评论(0编辑  收藏  举报