Java 使用信号量理解线程同步

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++) {

我在试着理解信号量。如果我想重复打印像@/}}这样的内容(每个字符后面都有\n),如何使用信号量一次只打印一个可见字符?我有一个想法,如何使用类似的代码为每个信号量打印一个字符:

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()
必须真正进入
最终
块,否则您将面临永远无法释放该信号量的风险。