多线程相关概念

时间:2022-07-23
本文章向大家介绍多线程相关概念,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

相关概念

  • 进程:启动一个应用程序,就会开启一个进程(微信,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方法代码执行结束的时候当前线程的状态为死亡状态。

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("主线程销毁....");

    }
}