线程的停止&后台线程

1线程的停止:
1). 停止一个线程一般会通过变量去控制
2). 如果需要停止一个处于等待状态下的线程,需要通过变量配合notify方法或者interrupt方法

public class Demo2 extends Thread{
                boolean flag = true;
                
                public Demo2(String name){
                                super(name);
                }
                @Override
                public void run() {
                                int i=0;
                                while(flag) {
                                                try {
                                                                this.wait();
                                                }catch(InterruptedException e) {
                                                                System.out.println("接受到了异常");
                                                }
                                                System.out.println(Thread.currentThread().getName()+":"+i);
                                                i++;
                                }
                }
                
                public static void main(String[] args) {
                                Demo2 a= new Demo2("lisen");
                                a.start();
                                for(int i=0;i<100;i++) {
                                                System.out.println(Thread.currentThread().getName()+":"+i);
                                                //当主线程的i 是80的时候停止lisen线程
                                                if(i==80) {
                                                                a.flag =false;
//                                                             a.interrupt();  //唤醒,把线程的等待状态强制清除,被清除状态的线程会收到一个中断异常                                                                          
                                                
                                                                synchronized (a) {                                                                             
                                                                                a.notify();
                                                                }
                                                                }
                                }
                }
}

2.守护线程(后台进程):在一个进程中如果只剩下了守护线程,那么守护线程也会死亡。

setDaemon(); //设置守护线程
isDaemon(); //判断是否为守护线程,true or false

package thread4;
//守护线程()
//守护线程(后台进程):在一个进程中如果只剩下了守护线程,那么守护线程也会死亡。
public class Demo3 extends Thread{
	public Demo3(String name) {
		super(name);
	}

	@Override
	public void run() {
		for(int i=0;i<=100;i++) {
			System.out.println("更新包目前下載"+i+"%");
			if(i==100) {
				System.out.print("更新下載完畢,準備安裝");
			}
		}
	}

	public static void main(String[] args) {
		Demo3 a = new Demo3("后台线程");
		System.out.println("是否为守护线程"+a.isDaemon());//这时候不是守护线程
		a.setDaemon(true);//设置线程为守护线程,true为守护线程,false为非守护线程
		System.out.println("是否为守护线程"+a.isDaemon());//这时候是守护线程
		a.start();
		for(int i=0;i<=100;i++) {
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
}

3.join方法

package thread4;
//join方法

class Mom extends Thread{
	public void  run(){
		System.out.println("安排儿子去打酱油");
		Son b = new Son();
		b.start();
		try{
			b.join();
		}catch(InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("用打来的酱油做好饭,吃饭!");
	}
}

class Son extends Thread{
	public void run() {
		System.out.println("去打酱油去了");
		System.out.println("打完酱油回家给老妈做菜");
	}
}

public class Demo4 {
	public static void main(String[] args) {
		Mom a= new Mom();
		a.start();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值