package duoxiancheng;
/*
* 停止线程只有一种方法,run方法结束;
* 多线程运行通常都是循环结构,只要控制住循环就可以让run方法结束---》线程结束;
*
*加入wait后,线程处于冻结(中断)状态,不会再去读取标记结束循环,无法结束;
*
* 当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结状态进行清除;同时通过操纵标记,让线程结束;
* Thread中的interrupt提供了该功能;
*
*
* */
class StopThread implements Runnable{
private boolean mark=true;
private int i=0;
public void setMark(boolean mark){//让循环结束;
this.mark=mark;
}
public synchronized void run(){
while(mark)
{
try{
wait();
}//放弃执行资格;
catch(InterruptedException e){
System.out.println(Thread.currentThread().getName()+".........Exception");
mark=false;
}
System.out.println(Thread.currentThread().getName()+".........run"+i++);
}
}
}
public class Stop {
public static void main(String[] args) {
StopThread st=new StopThread();
Thread t1=new Thread(st);
Thread t2=new Thread(st);
t1.start();
t2.start();
int num=0;
while(true)
{
if(num++<60)
{
System.out.println(Thread.currentThread().getName()+"main........."+num);
}
else {
//st.setMark(false);
t1.interrupt();//强制清除冻结状态,返回运行状态,不是结束线程,并返回一个InterruptedExceotion;
//interrupt后执行catch内的内容,然后继续向下执行;
t2.interrupt();//wait-notify是正常结束冻结状态;
break;
}
}
}
}
进程终止
最新推荐文章于 2024-03-28 19:29:53 发布