Java 同一线程上信号量的后续获取
我试图使用一个信号量锁定一个线程几秒钟,然后它放弃尝试获取锁并继续。问题是,我认为信号量实际上并没有锁定任何东西。以下是我想做的:Java 同一线程上信号量的后续获取,java,multithreading,semaphore,Java,Multithreading,Semaphore,我试图使用一个信号量锁定一个线程几秒钟,然后它放弃尝试获取锁并继续。问题是,我认为信号量实际上并没有锁定任何东西。以下是我想做的: Semaphore lock = new Semaphore(1) lock.acquire(); //Wait until some other thread releases the lock, or until the timeout lock.tryAcquire(WAIT_INTERVAL, TimeUnit.MILLISECONDS); //do w
Semaphore lock = new Semaphore(1)
lock.acquire();
//Wait until some other thread releases the lock, or until the timeout
lock.tryAcquire(WAIT_INTERVAL, TimeUnit.MILLISECONDS);
//do whatever
我认为问题在于:如果线程已经获取了锁,那么尝试从同一线程获取两次不会阻止线程运行。但我不确定。这就是发生的事吗
谢谢大家。解释代码中发生了什么
lock.acquire()
从此信号量获取许可证,直到有许可证可用为止。由于您只是试图获得一个许可证,那么它将立即获得lock.tryAcquire(等待间隔,时间单位为毫秒)代码>由于已获得1个许可证(来自前一行代码),因此在有人释放锁之前,该许可证将永远不会获得锁。所以它将等待/阻塞直到超时,我的意思是wait\u INTERVAL
时间流逝。如果获取了许可证,此方法将返回布尔值true
,如果获取许可证之前的等待时间已过,则返回false
。因此,它显然会返回false
无法复制。阻止你自己的线程的奇怪方式。您正在寻找
线程.sleep()
?