使用primefaces变量在Java中实现互斥锁

我想使用primefaces变量在Java中实现一个互斥锁。 我尝试使用lamport烘焙算法实现它,它的工作原理。 但是我不知道如何实现它,如果我之前不知道线程的数量。

此外,lamport算法不断增加标签,并且会出现溢出,如何避免这种情况?

您想构建一个或使用现有的信号量。

这有一个更好的答案 。

创建一个简单的TTAS(测试,测试和设置)自旋锁非常简单:

class TTASLock { private final AtomicLong thread = new AtomicLong(); void lock() { while (true) { if (thread.get() == 0) { // test if (thread.compareAndSet(0, Thread.currentThread().getId())) // testAndSet return; } } } void unlock() { thread.compareAndSet(Thread.currentThread().getId(), 0) } } 

这是一个非常简单的旋转锁定。 测试,测试和设置范例在逻辑pov中并不是绝对必要的,但是是一个关键的性能改进,因此在竞争中,等待锁获取的线程不会使具有失败CAS操作的Level2高速缓存行无效。