java线程的终止与中断
来源:互联网 发布:佳词网络科技集团 诈骗 编辑:程序博客网 时间:2024/05/20 23:40
1、简单了解一下:为何不赞成使用 Thread.stop、Thread.suspend 和 Thread.resume?
suspend 、resume、stop方法分别完成了线程的暂停、恢复、终止的工作。不建议使用原因:是因为这三个方法带来的副作用,如suspend( )方法,调用后,线程就会一直占用资源睡眠,直到调用resume( )恢复后,才可以运行。这样很容易引发死锁。同样,stop( )方法在终结一个线程时不会保证线程的资源正常释放,因此会导致程序可能工作在不确定的状态下。
线程的暂停、恢复操作可以用 等待/通知 机制来替代。但线程的终止就要用户去实现了。
详细可参考:http://bjzhkuang.iteye.com/blog/1748396
2、如何优雅安全地终止线程
终止一个线程 本质上就是线程间的通信交互的过程。因此,线程间的通信方式:共享变量、流、中断都可以用来实现终止线程的机制。最常用的方式便是“中断”;
下面的例子是:除了中断,还可利用boolean变量来控制是否需要终止线程;
public class ThreadTest{public static void main(String[] args) throws InterruptedException { MyTask taskOne = new MyTask(); Thread threadOne = new Thread(taskOne,"threadOne"); threadOne.start(); TimeUnit.MILLISECONDS.sleep(500); threadOne.interrupt(); MyTask taskTwo = new MyTask(); Thread threadTwo = new Thread(taskTwo,"threadTwo"); threadTwo.start(); TimeUnit.MILLISECONDS.sleep(500); taskTwo.cancel();}private static class MyTask implements Runnable{ //要加上volatile 修饰符,保证内存的可见性,及时更新变量值 private volatile boolean on = true; private long i; @Override public void run() { //调用cancel、或者中断都可以终止线程 while(on && !Thread.currentThread().isInterrupted()){ i++; } System.out.println("线程"+Thread.currentThread().getName()+" Count i = "+i); } public void cancel(){ on = false; } }}
运行结果:
线程threadOne Count i = 239418320
线程threadTwo Count i = 235374425
阅读全文
0 0
- java线程的终止与中断
- 线程的中断与终止
- 《Java并发编程》之线程中断与终止线程运行
- 《Java并发编程》之线程中断与终止线程运行
- 线程的终止stop与线程的中断interrupted
- C#线程阻塞、中断与终止
- JAVA线程的终止
- Java并发编程-02-线程的中断,休眠和等待线程的终止
- 详解Java多线程编程中线程的启动、中断或终止操作
- 线程的终止与回收
- 线程的创建与终止
- 线程的终止与暂停
- 线程的创建与终止
- Java无限执行的线程启动与终止
- java终止线程的方法
- Java 优雅的终止线程
- Java 终止线程的方法
- Java 优雅的终止线程
- 100 单调性及极值复习 型一:极值点判断;型二:不等式证明
- 自然语言处理课程自学笔记(一)之python正则表达式
- Zookeeper(五)Watcher机制
- [noip2015]神奇的幻方 题解
- Java开发环境搭建--Ubuntu14.04安装mysql5.6
- java线程的终止与中断
- Redis 入门介绍
- Spring配置文件<context:property-placeholder>标签使用
- BZOJ 2079 [Poi2010]Guilds 巧解
- nltk练习题
- Binary Search:658. Find K Closest Elements
- 2017.10.22 诸神眷顾的幻想乡 失败总结
- Java开发——反射机制
- 数组或列表切分