多线程信号量java

时间:2015-10-27 20:44:27

标签: java multithreading semaphore

我试图让程序通过信号量运行两个线程。信号量必须从0开始。 最后应该在屏幕上显示一条消息:

System.out.println ("string number" + i); 

其中' i'是进程的编号

我的代码是:

public class Orden extends Thread {
int id;
int num;
static Semaphore semaphore = new Semaphore (0); 
public Orden(int id)
{
    this.id= id;
}
@Override
public synchronized void run()
{ 
    try 
    {
        if(semaphore.availablePermits() == 0){
            semaphore.release(1);
            System.out.println(semaphore.availablePermits());     
        }
        else{
            System.out.println("Thread: " + this.id);
        }

    }
    catch (Exception e)
    {
        System.out.println(e.toString());
    }

}
public static void main(String[] args)
{
    Orden o1 = new Orden(1);
    Orden o2 = new Orden(2);
    o1.start();
    o2.start();

}
}

我哪里错了?我究竟做错了什么? 感谢

1 个答案:

答案 0 :(得分:0)

您的运行已同步但您在两个不同的对象o1和o2上同步,因此它实际上未同步。您可以在静态对象(如信号量)上使用同步块,以便它们在同一对象上同步。

@Override
public void run() {
    try {
        synchronized (semaphore) {
            if (semaphore.availablePermits() == 0) {
                semaphore.release(1);
                System.out.println(semaphore.availablePermits());
            } else {
                System.out.println("Thread: " + this.id);
            }
        }
    } catch (Exception e) {
        System.out.println(e.toString());
    }

}