Java守护线程和用户线程;多线程

2023-05-16 08:48:23

线程分两种

守护线程(Daemon)
用户线程

守护线程Thread.setDaemon(true)设置
一般程序使用用户线程,特殊的如垃圾回收线程使用守护线程

守护线程为用户线程服务的,用户线程关闭了,守护线程也会关闭。
守护线程定义要在Thread.start()之前
优先级一般较低

@Test
    public void testT() {
        System.out.println("testT start");
        Thread thread = new MyThread();
        thread.setName("守护线程");
        thread.setDaemon(true);
        thread.start();
        System.out.println("testT end");

    }

    class MyThread extends  Thread {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
            System.out.println(Thread.currentThread().getId());
            System.out.println("start");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                log.error("e:", e);
            }
            System.out.println("end");
        }

    }

多线程

在这里插入图片描述

了解了这两个概念之后,我们再来说说什么是多线程。举个例子,我们打开腾讯管家,腾讯管家本身就是一个程序,也就是说它就是一个进程,它里面有很多的功能,我们可以看下图,能查杀病毒、清理垃圾、电脑加速等众多功能。

按照单线程来说,无论你想要清理垃圾、还是要病毒查杀,那么你必须先做完其中的一件事,才能做下一件事,这里面是有一个执行顺序的。

如果是多线程的话,我们其实在清理垃圾的时候,还可以进行查杀病毒、电脑加速等等其他的操作,这个是严格意义上的同一时刻发生的,没有执行上的先后顺序。

线性安全

有时单线程并没有问题,多线程出来时,并发问题可能导致值出现错误

解决线性安全

synchronized关键字

public class ThreadDemo {

   int count = 0; // 记录方法的命中次数

   public synchronized void threadMethod(int j) {

       count++ ;

       int i = 1;

       j = j + i;
   }
}



  • 作者:学习微站公众平台
  • 原文链接:https://blog.csdn.net/weixin_43206161/article/details/125959668
    更新时间:2023-05-16 08:48:23