您的位置:首页 > 其它

多线程——停止线程(intertupt方法setDaemon和方法的使用)

2016-08-20 15:37 316 查看
package com.qianfeng.demo01;
/**
* 停止线程:
* 第三种方式:
* 如果读不到标记怎么办?
* 比如说在任务中让线程处于阻塞状态,无法执行标记,释放执行资格。
* run方法没有结束,所以线程无法停止,所以线程也没有办法退出。
*
* Thread当中有一个interrupt的方法,可以使线程从阻塞状态清除,恢复到就绪状态,让线程具备执行资格。
* interrupt():中断线程。
*
* InterruptedException:线程中断异常,线程在不该醒的时候醒了,就会报这个异常。
*
* setDaemon(boolean on)   将该线程标记为守护线程或用户线程
* 守护线程:相当于后台线程,当程序中其他线程都已经停止时,守护线程自动停止,如果有三个线程a,b,c,把a设置为守护线程,
* 他们启动时是一样的,抢夺资源时是一样的,但是结束是不一样的,当前台线程b,c结束时,a自动结束,也就是说前台线程才是
* 主要线程,守护线程的特点:具备了一定的依赖性。
*
*
* */
class StopRun2 implements Runnable{

private boolean flag = true;
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public synchronized void run() {
while (flag) {
try {
this.wait();
} catch (InterruptedException e) {
//				e.printStackTrace();
System.out.println(Thread.currentThread().getName()+"被打断了");
}
System.out.println(Thread.currentThread().getName()+".....run");
}

}

}
public class StopThreadDemo02 {

public static void main(String[] args) {
StopRun2 sRun = new StopRun2();
Thread t1 = new Thread(sRun);
Thread t2 = new Thread(sRun);

t1.start();
t2.setDaemon(true);   //把t2标记为守护线程

t2.start();

int num = 0;
while (true) {
if (++num==50) {
sRun.setFlag(false);
//清除t1和t2的冻结状态去
t1.interrupt();
//				t2.interrupt();
break;
}
System.out.println(Thread.currentThread().getName()+".....run.."+num);
}
System.out.println("over");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程
相关文章推荐