小编jfo*_*x78的帖子

tryLock() 循环?

tryLock()可能无法获取锁。因此,如果我们使用返回值来执行工作,我们可能根本无法完成工作。

Lock lock = new ReentrantLock();
boolean isLocked = lock.tryLock();

if (isLocked) {
    try {
        doWork();
    } finally {
        lock.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

Asynchronized会阻塞直到获得锁,所以我们知道doWork()最终会完成。

那么,我们应该tryLock()在循环内直到获得锁是正确的吗?

boolean isLocked = false;

while (!isLocked) {
    isLocked = lock.tryLock();
    Thread.sleep(100);
}

if (isLocked) {
    try {
        doWork();
    } finally {
        lock.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading

3
推荐指数
1
解决办法
1107
查看次数

标签 统计

concurrency ×1

java ×1

multithreading ×1