gpt4 book ai didi

java - 我如何保证线程在终止时安全地解锁锁,而所有方法都已经处理了该锁?

转载 作者:行者123 更新时间:2023-12-03 13:02:06 25 4
gpt4 key购买 nike

一个服务器项目可能会运行很长时间并创建许多线程。
在下面的代码中,我问自己,除了在setData(MyData data)方法中进行总体 try catch 之外,是否还必须以某种方式保护锁:
注意:假设它是线程安全的,我对可能导致线程终止的其他原因或自然灾害并不十分熟悉,例如Windows 7限制等。 (我不贪心,使用+ -5线程,但仍然)

public class MyFactory {

private ReadWriteLock rwl = new ReentrantReadWriteLock();
private Lock readLock = rwl.readLock();
private Lock writeLock = rwl.writeLock();

private static MyFactory _instance = new MyFactory();
private static Map<Integer, MyData> mapDatas = new HashMap<>();

public static MyFactory getInstance() {
return _instance;
}


public void setData(MyData data) {
writeLock.lock();
try {
mapData.put(...);
} catch (Exception exc) {
...
} finally {
writeLock.unlock();
}
}

最佳答案

假设您从未将锁公开给其他对象,并且始终在finally块中使用对锁进行解锁,那么您就可以了。
原因是,如果中发生了某些情况,请尝试调用捕获块,始终调用最后块中的代码。即使抛出Error也是如此。例如,当您的内存不足或某些DLL发生链接错误时,就会发生这种情况。如果发生了比Error更糟糕的事情,那很可能也会结束您的过程并解决问题。

关于java - 我如何保证线程在终止时安全地解锁锁,而所有方法都已经处理了该锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64408182/

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