gpt4 book ai didi

java - 当一个方法已经被另一个线程执行时跳过该方法

转载 作者:行者123 更新时间:2023-12-01 17:00:12 26 4
gpt4 key购买 nike

我的问题与此相关:Exit a method if another thread is executing it

有一个方法是由多个线程执行的。如果一个线程正在执行该方法,则任何其他线程都应该退出。我的解决方案是这样的:

public class ReentrantLockTest implements Runnable {

private static final ReentrantLock LOCK = new ReentrantLock();

@Override
public void run() {
if (LOCK.tryLock()) {
System.out.println("Aquired. Thread " + Thread.currentThread().getId());
try {
// do stuff here

} catch (Exception e) {
// handle errors
} finally {
// release the lock
LOCK.unlock();
}
}
}

这对我来说似乎很好,但在生产中有时会发生锁定未释放的情况,因此除非我重新启动系统,否则该方法根本不会被执行。

所以我有两个问题:1.锁怎么可能没有释放?2. 测试此类代码的好方法是什么?只是在循环中运行它并希望它会在出现错误时崩溃,这似乎不是一个好的解决方案。

最佳答案

您应该使用synchronized关键字。这确保只有一个线程同时执行一段代码。

将方法更改为:

public synchronised void run() {
//your code
}

关于java - 当一个方法已经被另一个线程执行时跳过该方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61520562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com