zoukankan      html  css  js  c++  java
  • java-守护线程

    守护线程:也可以理解为后台线程,之前创建的都是前台线程。
    只要线程调用了setDaemon(true);就可以把线程标记为守护线程。
    前台后台线程运行时都是一样的,获取CPU的执行权执行。
    只有结束的时候有些不同。
    前台线程要通过run方法结束,线程结束。
    后台线程也可以通过run方法结束,线程结束,还有另一种情况,
    当进程中所有的前台线程都结束了,这时无论后台线程处于什么样的状态,都会结束,从而进程会结束。
    进程结束依赖的都是前台线程。

    //演示停止线程。
    class Demo implements Runnable {
        private boolean flag = true;
        public synchronized void run() {//不要这么干将synchronized加到run方法这已经变成了单线程了这里是故意这么做为了测试wait()  
    
            while(flag) {
                try    {
                    wait();//t1  t2   //如果使用notify()必须和wait()在同一个锁里,那如果不在同一个锁怎么办只能用interrupt()
                }
                catch (InterruptedException e) {
                    System.out.println(Thread.currentThread().toString()+"....."+e.toString());
                    changeFlag();
                }
    
                System.out.println(Thread.currentThread().getName()+"----->");
            }
        }
        //对标记的修改方法。
        public void changeFlag() {
            flag = false;
        }
    }
    
    
    class MStopThreadDemo2 {
        public static void main(String[] args) {
            Demo d = new Demo();
    
            Thread t1 = new Thread(d);
            Thread t2 = new Thread(d);
            t1.start();
            //将t2标记为后台线程,守护线程。
            t2.setDaemon(true); //将t2标记为后台线程只要t1线程结束不管t2线程处于什么状态,整个进程都会结束
            t2.start();
    
            int x = 0;
            while(true){
                if(++x == 50){
                    //d.changeFlag();//改变线程任务代码的标记,让其他线程也结束。
                    //对t1线程对象进行中断状态的清除,强制让其恢复到运行状态。
                    t1.interrupt();
                    //对t2线程对象进行中断状态的清除,强制让其恢复到运行状态。
                    //t2.interrupt();//将这个注释掉将t2改成后台进程,那么只要前台进程结束,不管后台进程处于什么状态整个进程就结束了
    
                    break;//跳出循环,主线程可以结束。
                }
                System.out.println("main-------->"+x);
            }
    
            System.out.println("over");
        }
    }
  • 相关阅读:
    CentOS7配置Tomcat8开机自动启动
    StackExchange.Redis 异步超时解决方案
    同一个tomcat部署多个项目导致启动失败
    吐血记录微信小程序授权获取Unionid及linux下使用bouncycastle解密用户数据 遇到的坑
    CentOS7设置ssh服务以及端口修改
    linux CentOS7安装与配置nginx1.18.0 并设置开机启动
    C语言函数指针用法
    Javascript优点和缺点
    VIM 单词大小写转换
    python base64编码实现
  • 原文地址:https://www.cnblogs.com/wgDream/p/7347868.html
Copyright © 2011-2022 走看看