java关闭软件的代码,Java线程关闭:代码实战总结

总的来说有3种:lOH软件培训网

1.使用状态位,这个简单,就不多说了:lOH软件培训网

public class Task extends Thread {lOH软件培训网

private volatile boolean flag= true;lOH软件培训网

public void stopTask() {lOH软件培训网

flag = false;lOH软件培训网

}lOH软件培训网

@OverridelOH软件培训网

public void run() {lOH软件培训网

while(flag){lOH软件培训网

/* do your no-block task */lOH软件培训网

}lOH软件培训网

}lOH软件培训网

}lOH软件培训网

2.当线程等待某些事件发生而被阻塞,又会发生什么?当然,如果线程被阻塞,它便不能核查共享变量,也就不能停止。这在许多情况下会发生,例如调用 Object.wait()、Thread.sleep等,这里仅举出一些。他们都可能永久的阻塞线程。即使发生超时,在超时期满之前持续等待也是不可行和不适当的,所以,要使用某种机制使得线程更早地退出被阻塞的状态。这个时候你可以使用Thread.interrupt();lOH软件培训网

public class BlockTask extends Thread {lOH软件培训网

@OverridelOH软件培训网

public void run() {lOH软件培训网

try {lOH软件培训网

while (!Thread.interrupted()) {lOH软件培训网

/* do your block task*/lOH软件培训网

}lOH软件培训网

} catch (Exception e) {lOH软件培训网

e.printStackTrace();lOH软件培训网

}lOH软件培训网

}lOH软件培训网

}lOH软件培训网

但是上面的代码或许有些不妥,或许用例子更能把问题说清楚。你怎么知道该代码段会发生阻塞?interrupt()函数到底是什么意思呢?首先说明的是,interrupted()方法只能解决跑出InterruptedException异常的阻塞。而interrupt()并不是关闭阻塞线程,而是解除阻塞。那这里就举出一个关闭线程阻塞的例子:lOH软件培训网

1 public class BlockTask extends Thread {lOH软件培训网

2 @OverridelOH软件培训网

3 public void run() {lOH软件培训网

4 try {lOH软件培训网

5 sleep(10000);lOH软件培训网

6 } catch (InterruptedException e) {lOH软件培训网

7 System.out.println("if yout use interrupt you will see me");lOH软件培训网

8 }lOH软件培训网

9lOH软件培训网

10 }lOH软件培训网

11 public static void main(String[] args)throws Exception {lOH软件培训网

12 // TODO Auto-generated method stublOH软件培训网

13 BlockTask task = new BlockTask();lOH软件培训网

14 task.start();lOH软件培训网

15 Thread.sleep(1000);lOH软件培训网

16 task.interrupt();lOH软件培训网

17lOH软件培训网

18 }lOH软件培训网

19 }lOH软件培训网

3.上面说了,interrupt()只能解决InterruptedException的阻塞的线程,那么遇到一些其他的io阻塞怎么处理呢?这个时候java都会提供相应的关闭阻塞的办法。例如,服务器可能需要等待一个请求(request),又或者,一个网络应用程序可能要等待远端主机的响应,这个时候可以使用套接字close()方法lOH软件培训网

1 public class SocketTask extends Thread {lOH软件培训网

2 private volatile ServerSocket server;lOH软件培训网

3lOH软件培训网

4 public void stopTask(){lOH软件培训网

5 try {lOH软件培训网

6 if(server!=null){lOH软件培训网

7 server.close();lOH软件培训网

8 System.out.println("close task successed");lOH软件培训网

9 }lOH软件培训网

10 } catch (IOException e) {lOH软件培训网

11 System.out.println("close task failded");lOH软件培训网

12 }lOH软件培训网

13 }lOH软件培训网

14 @OverridelOH软件培训网

15 public void run() {lOH软件培训网

16 try {lOH软件培训网

17 server = new ServerSocket(3333);lOH软件培训网

18 } catch (IOException e) {lOH软件培训网

19 e.printStackTrace();lOH软件培训网

20 }lOH软件培训网

21 }lOH软件培训网

22lOH软件培训网

23 public static void main(String[] args) throws InterruptedException {lOH软件培训网

24lOH软件培训网

25 SocketTask task = new SocketTask();lOH软件培训网

26 task.start();lOH软件培训网

27 Thread.sleep(1000);lOH软件培训网

28 task.stopTask();lOH软件培训网

29 }lOH软件培训网

30lOH软件培训网

31 }lOH软件培训网

Tags:郑州北大青鸟乘车路线,郑州计算机学校排名,郑州计算机学校招生要求,郑州北大青鸟学费是多少呢,河南郑州北大青鸟2018年招生简章,河南省it专业学校有哪些

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值