43. 守护线程 和 join方法

1.守护线程(后台线程):
            我们在使用一款软件的时候,有的软件会让我们在不知道的情况下下载一些东西,那么这个就是后台线程。
            一般用于提高软件的下载量(也就是赚取一些广告费)
            
            setDaemon(boolean b)    设置是否为守护线程
            isDaemon()          返回是否为守护线程(是true否false)
注意:当程序停止运行的时候,守护线程也必须停止

下面我们来模拟使用qq,然后后台下载一款软件

public class Demo11 implements Runnable{
    @Override
    public void run() {
        for (int i = 1; i <= 100; i++) {
            System.out.println("目前下载"+i+"%");
        }
    }
    public static void main(String[] args) {
        
        Demo11 d = new Demo11();
        Thread thread = new Thread(d);
        thread.setDaemon(true);//设置为守护线程
        thread.start();
        //当i为100时qq程序停止
        for (int i = 0; i < 100; i++) {
            System.out.println("使用qq中"+i);
            
        }
    }
}

2.join 加入:

    当在一个线程任务体(run)中使用此方法时,必须要等调用join方法的线程执行完成任务后,这个任务体才能继续执行

代码实例: 

class Thread2 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }    
    }
}

public class Demo12 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if(i==30) {
                Thread2 t = new Thread2();
                Thread thread = new Thread(t,"加入的线程");
                thread.start();
                try {
                    thread.join();//加入一个线程
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
    
    public static void main(String[] args) {
        Demo12 d = new Demo12();
        Thread thread = new Thread(d,"被加入的线程");
        thread.start();
    }
}

猜你喜欢

转载自www.cnblogs.com/zjdbk/p/8971407.html