atitit.线程死锁 卡住无反应 的原因in cmd调用的解决方案  v3 q39

atitit.线程死锁 卡住无反应 的原因in cmd调用的解决方案  v3 q39

 

1问题::线程死锁  卡住无反应1

1.1. 分类:: cmd调用,  net io  , file  io 调用, multi thread调用same var的时候儿..1

1.2. 原因readLine()是阻塞方法1

1.3. 调用same var1

2解决之道::2

2.1. 使用了cmd /k走死锁兰...改成个/cok..2

2.2. Watchdog2

3Ref3

 

 

1. 问题::线程死锁  卡住无反应

1.1. 分类:: cmd调用,  net io  , file  io 调用, multi thread调用same var的时候儿..

 

1.2. 原因readLine()是阻塞方法

BufferedReader.readLine  死锁的原因

   // readLine()是阻塞方法,当键盘输入之后,点击回车,得到的值不会为null,就一直处于阻塞状

1.3. 调用same var

 

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

 

2. 解决之道::

2.1. 使用了cmd /k走死锁兰...改成个/cok..

String cmd="cmd.exe /c dir  ";//cmd="dir";

 

 

 

2.2. Watchdog

private void check_time_out(FutureTask  task) {

Runnable checkTimeout=new Runnable() {

@Override

public void run() {

try {

System.out.println("--start check task ,timeout:"+timeout_secs" taskid:"+task);

Object r=task.get(timeout_secs,TimeUnit.SECONDS);

catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

catch (ExecutionException e) {

// TODO Auto-generated catch block

e.printStackTrace();

catch (TimeoutException e) {

// TODO Auto-generated catch block

//e.printStackTrace();

System.out.println( "--checkTimeout");

//task.cancel(true);

//task.

catch(CancellationException e)

{

System.out.println("--warnging");

e.printStackTrace();

}

}

};

new Thread(checkTimeout).start();

}

3. Ref

Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript. —核心网络.htm

原文地址:https://www.cnblogs.com/attilax/p/5274377.html