atitit.线程死锁 卡住无反应 的原因in cmd调用的解决方案 v3 q39
1.1. 分类:: cmd调用, net io , file io 调用, multi thread调用same var的时候儿..1
2.1. 使用了cmd /k走死锁兰...改成个/c佐ok兰..2
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://blog.csdn.net/attilax
2. 解决之道::
2.1. 使用了cmd /k走死锁兰...改成个/c佐ok兰..
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