java如何关闭一个线程
来源:互联网 发布:摩歌摄影怎么样知乎 编辑:程序博客网 时间:2024/05/16 10:28
看到很多人在提问在不使用废弃的stop等方法下如何去实时关闭一个线程
先来说一下线程关闭后台要做哪些工作
1、线程异常关闭,如果当前线程设置了setUncaughtExceptionHandler,并且线程是因为未捕获的异常进行关闭的,线程会调用设置给它的 Thread.UncaughtExceptionHandler 来捕获异常。
2、如果线程处于正常的关闭中,就会触发所有的已经注册的Shutdownhook。关闭钩子是使Runtime.addShutdownHook注册的尚未开始的线程。JVM并不能保证关闭钩子的开始顺序。如果关闭应用程序线程时,它仍然在运行,它们将与关闭进程并发执行。
3、当所有关闭钩子结束的时候,如果当前线程设置了 Runtime.runFinalizersOnExit为true,JVM在退出 Java 运行时前运行此终结方法,之后停止。
4、JVM不会尝试停止或中断任何关闭时仍然在运行中的应用程序线程;它们在JVM最终终止时被强制退出。
线程的关闭方法:
1、调用线程已经废弃的方法stop(),Sun(Oracle)已经不建议使用.他们建议使用下面的这种方式。
2、在线程中每隔断时间监控一下影响线程状态的变量,根据变量来 + 运行方法依次返回(还可以直接扔出运行时异常来结束线程)
下面是sun(oracle)原话"stop 的许多使用都应由只修改某些变量以指示目标线程应该停止运行的代码来取代。目标线程应定期检查该变量,并且如果该变量指示它要停止运行,则从其运行方法依次返回。如果目标线程等待很长时间(例如基于一个条件变量),则应使用 interrupt 方法来中断该等待"
下面类里面的代码.
class TestThread{ public static void main(String[] args) { Thread1 t1=new Thread1(); t1.start(); int index=0; while(true) { //这里主线程就去尝试着去中断这个线程 if(index++==100) { t1.stopThread(); t1.interrupt(); break; } System.out.println(Thread.currentThread().getName()); } System.out.println("main() exit"); }} class Thread1 extends Thread{ //判断当前的线程是否要停止。 private boolean bStop=false; public synchronized void run() { //通过使用while来确定线程是否要停止 while(!bStop) { try { //这里肯定是下面的结果执行完了之后再去判断 //有很多人希望发出中断信息后直接停止当前线程 //这种方式是不可取的. //当然如果线程处于中断等待状态,你可以使用interrupt取消等待. wait(); } catch(InterruptedException e) { //e.printStackTrace(); if(bStop) return; } System.out.println(getName()); } } public void stopThread() { bStop=true; }}
上面只是列出了一些线程简单的监控,对于一些简单的程序来说已经够用.如果特别复杂的话,还需要自己在这个基础上实现适合自己的线程状态控制。
如果想做到发出命令后立刻关闭,那么在线程正在处理的业务逻辑中就要实时的去验证相应的变量是否发生变化.
- java如何关闭一个线程
- 如何关闭java线程
- 如何关闭一个swingworker线程?
- 如何优雅的关闭一个线程
- java 关闭一个正在执行的线程
- java 关闭一个正在执行的线程
- Java线程的传说(3)——如何关闭一个正在accept的ServerSocket?
- java多线程开发 如何正确关闭线程
- 【Java】如何终止一个线程
- 如何停止一个Java线程
- Android 关闭一个线程
- 线程如何关闭测试
- java 线程关闭小结
- java 线程关闭小结
- java 线程关闭小结
- java关闭线程
- JAVA多线程-关闭线程
- java 关闭线程
- cocos2d数据存储的四种形式
- 人的一生,到底在追求什么?
- QQ浮云效果
- 互联网项目管理要点
- TCP-IP_Socket.ppt
- java如何关闭一个线程
- C#中using关键字的作用及其用法
- TCP的阻塞机制
- java并发集合的优缺点
- java字节流与字符流的区别&编码&缓冲
- Java入门程序,初学者易出错的代码
- 判断用户使用的浏览器和系统
- HTML相关的正则表达式工具类
- Visual.Assist.X.V10.7.1906的Crack破解补丁. 2012.05.10(Release candidate.)