java 线程关闭小结
来源:互联网 发布:中南大学网络教育网 编辑:程序博客网 时间:2024/05/14 23:49
总的来说有3种:
1.使用状态位,这个简单,就不多说了:
public class Task extends Thread { private volatile boolean flag= true; public void stopTask() { flag = false; } @Override public void run() { while(flag){ /* do your no-block task */ } }}
2.当线程等待某些事件发生而被阻塞,又会发生什么?当然,如果线程被阻塞,它便不能核查共享变量,也就不能停止。这在许多情况下会发生,例如调用 Object.wait()、Thread.sleep等,这里仅举出一些。他们都可能永久的阻塞线程。即使发生超时,在超时期满之前持续等待也是不可行和不适当的,所以,要使用某种机制使得线程更早地退出被阻塞的状态。这个时候你可以使用Thread.interrupt();
public class BlockTask extends Thread { @Override public void run() { try { while (!Thread.interrupted()) { /* do your block task*/ } } catch (Exception e) { e.printStackTrace(); } }}
但是上面的代码或许有些不妥,或许用例子更能把问题说清楚。你怎么知道该代码段会发生阻塞?interrupt()函数到底是什么意思呢?首先说明的是,interrupted()方法只能解决跑出InterruptedException异常的阻塞。而interrupt()并不是关闭阻塞线程,而且解除阻塞。那这里就举出一个关闭线程阻塞的例子把:
1 public class BlockTask extends Thread { 2 @Override 3 public void run() { 4 try { 5 sleep(10000); 6 } catch (InterruptedException e) { 7 System.out.println("if yout use interrupt you will see me"); 8 } 9 10 }11 public static void main(String[] args)throws Exception {12 // TODO Auto-generated method stub13 BlockTask task = new BlockTask();14 task.start();15 Thread.sleep(1000);16 task.interrupt();17 18 }19 }
3.上面说了,interrupt()只能解决InterruptedException的阻塞的线程,那么遇到一些其他的io阻塞怎么处理呢?这个时候java都会提供相应的关闭阻塞的办法。例如,服务器可能需要等待一个请求(request),又或者,一个网络应用程序可能要等待远端主机的响应,这个时候可以使用套接字close()方法
1 public class SocketTask extends Thread { 2 private volatile ServerSocket server; 3 4 public void stopTask(){ 5 try { 6 if(server!=null){ 7 server.close(); 8 System.out.println("close task successed"); 9 }10 } catch (IOException e) {11 System.out.println("close task failded");12 }13 }14 @Override15 public void run() {16 try {17 server = new ServerSocket(3333);18 } catch (IOException e) {19 e.printStackTrace();20 }21 }22 23 public static void main(String[] args) throws InterruptedException {24 25 SocketTask task = new SocketTask();26 task.start();27 Thread.sleep(1000);28 task.stopTask();29 }30 31 }
0 0
- java 线程关闭小结
- java 线程关闭小结
- java 线程关闭小结
- java关闭子线程小结
- java关闭线程
- JAVA多线程-关闭线程
- 如何关闭java线程
- java 关闭线程
- java 线程 小结
- java 线程小结
- java 线程小结
- java 线程小结
- Java 小结-线程
- java线程小结
- java的线程小结
- java 线程小结
- Java中线程小结
- Java线程学习小结
- SQL Server 2014 的版本和组件
- FATAL org.apache.hadoop.hbase.master.HMaster: Unhandled exception
- Linux 内核定时器
- libusb-win32
- 完美实现跨域Iframe高度自适应【Iframe跨域高度自适应解决方案】
- java 线程关闭小结
- DLL(动态链接库)专题
- win7&Cocos2dx2.2&Android最简单方案
- [x86/x64]基础
- Lua chapter 4
- VmWare虚拟机安装Ubuntu12.04.1
- 安卓下cocos2dx实现cpp部分在线更新
- window 下 mysql 主从复制
- 浅谈arduino的bootloader