【发布时间】:2011-12-06 06:59:03
【问题描述】:
我有以下 Java 代码:
import java.util.concurrent.*;
class Foo{
static Semaphore s = new Semaphore(1);
public void fun(final char c, final int r){
new Thread(new Runnable(){
public void run(){
try{
s.acquire(r);
System.out.println(c+"_"+r);
s.release(r+1);
} catch(Exception e){ e.printStackTrace(); }
}
}).start();
}
}
class ths{
public static void main(String[]args) throws Exception{
Foo f = new Foo();
f.fun('B',2);
f.fun('F',6);
f.fun('A',1);
f.fun('C',3);
f.fun('D',4);
f.fun('E',5);
}
}
理想情况下,这应该按顺序打印 A_1 到 F_6 并退出,但由于某种原因,这不会发生。它通常打印 A_1 和 B_2 然后卡住了。
我找不到我的代码有任何明显错误的地方。有什么建议吗?
【问题讨论】:
标签: java multithreading deadlock semaphore