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()