在阅读有关信号量之后,我尝试了这个测试代码,我在其中创建了两个线程A和B.我的目标是,让线程A等待线程B中某些操作的10秒完成。但是由于我稍微改变了线程B中的逻辑,通过引入一个永远不会出现的无限循环,线程A也挂起,并且程序永远运行。任何人都可以帮助我实现我期待的目标吗?信号量和线程问题
包装;
import java.util.concurrent.Semaphore;
public class Concurrency {
public int count = 0;
public static void main(String args[]) throws Exception {
final Semaphore sem = new Semaphore(1, true);
Thread thrdA, thrdB;
thrdA = new Thread(new Runnable() {
@Override
public void run() {
synchronized (sem) {
try {
sem.wait(10000);
System.out.println("thread1");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thrdB = new Thread(new Runnable() {
@Override
public void run() {
synchronized (sem) {
System.out.println("thread2");
while(true){
}
}
}
});
thrdA.start();
thrdB.start();
thrdA.join();
thrdB.join();
}
}
为什么你在使用'Semaphore'如果你从来没有'acquire()'然后'release()'它呢?你可以为此使用一个'private final Object'。 – corsiKa 2011-12-22 06:08:56