Java 使用信号量理解线程同步
我在试着理解信号量。如果我想重复打印像@/}}这样的内容(每个字符后面都有\n),如何使用信号量一次只打印一个可见字符?我有一个想法,如何使用类似的代码为每个信号量打印一个字符:Java 使用信号量理解线程同步,java,semaphore,thread-synchronization,Java,Semaphore,Thread Synchronization,我在试着理解信号量。如果我想重复打印像@/}}这样的内容(每个字符后面都有\n),如何使用信号量一次只打印一个可见字符?我有一个想法,如何使用类似的代码为每个信号量打印一个字符: public static class PrintB implements Runnable // similar class for each semaphore { public void run(){ for (int i=0; i<count; i++) {
public static class PrintB implements Runnable // similar class for each semaphore
{
public void run(){
for (int i=0; i<count; i++) { // printing lots to see functionality
try {
printableB.acquire(); // the semaphore
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
System.out.printf( "%s\n", "/"); // Need 2 /'s
printableC.release(); // handled B's print, move to C
}
}
}
公共静态类PrintB为每个信号量实现可运行//类似的类
{
公开募捐{
对于(int i=0;我认为您需要分享有关代码的更多详细信息,以便我们提供正确的答案。但是,获取一个信号量并释放另一个信号量听起来很麻烦。是的,我不知道为什么您的其余代码没有打印,因为您没有显示其余的代码。只有其他想法:release()
必须真正进入最终
块,否则您将面临永远无法释放该信号量的风险。