我试图让程序通过信号量运行两个线程。信号量必须从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();
}
}
我哪里错了?我究竟做错了什么? 感谢
答案 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());
}
}