package concurrency.sharingobject;
/**
*
* @author Administrator
* 对于线程的停止 ,我们可以用两种方法
* 1 .定义开关变量 ,但这种方法有缺陷 ,对于正处于阻塞状态的线程无法执行中断操作
* while(!stopped){
* while(xx)
* wait();
* }
2.利用中断的中断,在线程阻塞时,我们可以向其发出一个中断请求,收到请求后,线程会以一个
InterruptedExeption进行响应,而我们可以在异常中进行线程的停止
while(!stopped){
try{
while(xx)
wait()
}catch(InterrupedException e){
stopped = true;
}
}
3.将上面两种方法结合起来
while(!stopped){
try{
while(xx)
wait()
}catch(InterruptedException e){
if(stopped ==true)break;
}
}
终止方法就是 将 stopped = true,然后向线程发出一个中断请求
下面这个类的功能是在任意时间都可以停止线程(该线程执行+1操作,到大于 3时将等待)
*/
public class ThreadTest {
static volatile boolean stopped;
static int count=1 ;
public static void main(String args[]) throws InterruptedException {
final Object lock = new Object();
Thread t = new Thread("t") {
@Override
public void run() {
while (!stopped) {
synchronized (lock) {
try {
Thread.sleep(1000 * 1);// 1s
while (count > 3)
lock.wait();
} catch (InterruptedException e) {
if(stopped)break;
}
System.out.println(Thread.currentThread().getName()
+ count);
count++;
}
}
}
};
t.start();
t.setPriority(Thread.MIN_PRIORITY);
Thread.sleep(1000 * 1);
stop(t);
}
public static void stop(Thread t) {
stopped = true;
t.interrupt();
}
}
线程的停止
最新推荐文章于 2022-03-01 23:07:12 发布