gpt4 book ai didi

java - `Thread.checkAccess()`是 `Thread.suspend()`的适当替代品吗?

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

IntelliJ建议我将不赞成使用的Thread.suspend()替换为Thread.checkAccess()。基于the (very brief) documentscheckAccess()似乎是一个好主意,但似乎与.suspend()(肯定是very bad based on the docs)也有很大不同。但是,这些相同的文档似乎并未提供.suspend()的有用替代方法,只是建议所提出的每种解决方案都存在一些不小的缺点。

同时,虽然更好,但.checkAccess()似乎依赖于已实现的SecurityManager,因此,如果没有经过深思熟虑的实现,仅单击“修复此问题”似乎也不是一个好主意。

我已经提出了建议的更改,但没有任何问题-但是...我不知道...

如果.checkAccess()是最好的选择,简而言之,实现它的最佳方法是什么?如果不是,还有什么更好的选择?

最佳答案

根据Thread.suspend的文档:

First, the checkAccess method of this thread is called with no arguments. This may result in throwing a SecurityException (in the current thread).

If the thread is alive, it is suspended and makes no further progress unless and until it is resumed.


因此,调用 checkAccess()保留了 suspend()调用的“安全”部分,因为如果您没有访问权限,它将引发异常,但随后将无法进行危险的死锁操作。
我不完全知道“挂起”的作用-我从未使用过这种方法,它被有用地定义为“挂起该线程”。但是,如果您只想等待某些事情发生,则可以等待某个对象:
synchronized (thing) {
thing.wait();
}
然后从您将用于恢复该线程的线程中调用 thing.notify()

但是请注意, Object上的原始同步方法本质上难以使用-例如, Object.wait()可能会虚假地唤醒。您应该很少直接使用它们(或 Thread)。 java.util.concurrent包中有一堆更高级别的同步对象。例如,您可能在“已暂停”和“正在恢复”线程之间共享一个队列,在该线程中,在您要挂起的那一点上,一个线程在等待另一个线程将某些东西放入该队列中。

关于java - `Thread.checkAccess()`是 `Thread.suspend()`的适当替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60164608/

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