首页 / JAVA / java线程常用做法
java线程常用做法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java线程常用做法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2000字,纯文字阅读大概需要3分钟。
内容图文
介绍:
在程序中,我们是不能随便中断一个线程的,因为这是极其不安全的操作,我们无法知道这个线程正运行在什么状态,它可能持有某把锁,强行中断可能导致锁不能释放的问题;或者线程可能在操作数据库,强行中断导致数据不一致混乱的问题。正因此,JAVA里将Thread的stop方法设置为过时,以禁止大家使用。
一个线程什么时候可以退出呢?当然只有线程自己才能知道。
所以我们这里要说的Thread的interrrupt方法,本质不是用来中断一个线程。是将线程设置一个中断状态。
当我们调用线程的interrupt方法,它有两个作用:
1、如果此线程处于阻塞状态(比如调用了wait方法,io等待),则会立马退出阻塞,并抛出InterruptedException异常,线程就可以通过捕获InterruptedException来做一定的处理,然后让线程退出。
2、如果此线程正处于运行之中,则线程不受任何影响,继续运行,仅仅是线程的中断标记被设置为true。所以线程要在适当的位置通过调用isInterrupted方法来查看自己是否被中断,并做退出操作。
--抄自 https://www.cnblogs.com/qingquanzi/p/9018627.html
常用做法:
1、重写run方法时,常用的做法是在run方法内用 while (!Thread.interrupted()) 包裹代码块,以便当线程处于中断状态时,能退出while循环从而结束run方法(即结束线程),Thread.interrupted()方法返回当前中断标识后,会将中断标识重置回false。
2、当线程处于阻塞状态过程中,如果此时有其他地方将线程的中断标志试图改成ture,则会抛出InterruptedException,并且中断标志仍然是false,因此需要在catch块里调用Thread.currentThread().interrupt(); 以保证线程的中断标志是true,以便经过while时,能结束run方法。示例代码如下:
1 @Override 2 public void run() { 3 while (!Thread.interrupted()) { 4try { 5 System.out.println("线程执行"); 6 Thread.sleep(10 * 1000); 7 } catch (InterruptedException e) { 8// 抛出中断异常后,会自动清除中断状态,因此需要调用interrupt()重新设置中断状态 9 Thread.currentThread().interrupt(); 10 } 11 } 12 }
3、结束线程池需要按照jdk_api建议的方式,分两个阶段关闭 ExecutorService。第一阶段调用 shutdown 拒绝传入任务,然后调用 shutdownNow(如有必要)取消所有遗留的任务。代码示例如下:
1 void shutdownAndAwaitTermination(ExecutorService pool) { 2 pool.shutdown(); // Disable new tasks from being submitted 3try { 4// Wait a while for existing tasks to terminate 5if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { 6 pool.shutdownNow(); // Cancel currently executing tasks 7// Wait a while for tasks to respond to being cancelled 8if (!pool.awaitTermination(60, TimeUnit.SECONDS)) 9 System.err.println("Pool did not terminate"); 10 } 11 } catch (InterruptedException ie) { 12// (Re-)Cancel if current thread also interrupted13 pool.shutdownNow(); 14// Preserve interrupt status15 Thread.currentThread().interrupt(); 16 } 17 }
参考好帖:https://www.cnblogs.com/qingquanzi/p/9018627.html
原文:https://www.cnblogs.com/oldpub-blog/p/14245816.html
内容总结
以上是互联网集市为您收集整理的java线程常用做法全部内容,希望文章能够帮你解决java线程常用做法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。