首页 > 软件测试/ 正文
Java线程关闭:代码实战总结
2012-09-14 15:01:09 ℃总的来说有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 stub
13 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 @Override
15 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 }
- 上一篇:Java基础之Java运算符大百科
- 下一篇:常见的Java的10种设计模式介绍
更多女生学软件开发好就业吗,河南java培训机构哪家比较好点,郑州学软件开发以后的就业怎么样,C++使用可变参数,郑州北大青鸟java培训课程全新改版升级,郑州北大青鸟软件学院2017年招生简章公相关文章
- Java从控制台中读取数据方法
- 每日构建和冒烟测试
- 结对探索式测试的体会
- 11项针对轻量级高效同行代码评审
- 我的软件测试之旅:(3)同期——加入测试自动化小组
- Dao层的测试实践
- PURIFF:Sprint的测试范围
- 关于API测试
- IT行业——轻方法与满意质量相比较
- 质量保证漫漫谈之QA基本工作流程
- 测试人员如何保证软件质量
- 同行评审那些事儿(终篇):他山之石
- 应用质量特性提高测试效率和产品质量
- 实用SOA测试指南:挑战和路线图
- Tom J. McCabe:寻找度量软件的本源
- 从软件系统的构成看覆盖率分析技术
- 软件项目质量管理实战总结(下)
- 关于软件质量和软件测试的一点点看法
- vs平台崩溃,VS程序老是自动关闭分析解决
- 耳机线断了怎么接 ,怎样接耳机线(图文)
- 了解DOS下的内存
- 电脑使用小常识
- 我们电脑里存储的数据安全吗?
- 显示器漏光介绍
- 手机储存卡真假识别宝典
- 电脑设置了开机密码要解除怎么做?
- 软件项目开发流程图
- 软件工程师工作好吗
- 郑州软件开发编程学校哪家好
- 郑州大学生短期Java培训学校哪家好
- 搜索
-
- 热门标签