Java 如何允许线程只修改自身
在该方法的文档中,我们有:Java 如何允许线程只修改自身,java,multithreading,Java,Multithreading,在该方法的文档中,我们有: Throws: SecurityException - if the current thread cannot modify this thread 该方法的主要优点如下: public void interrupt() { if (this != Thread.currentThread()) checkAccess(); //checking access //The rest is ommited } c
Throws:
SecurityException - if the current thread cannot modify this thread
该方法的主要优点如下:
public void interrupt() {
if (this != Thread.currentThread())
checkAccess(); //checking access
//The rest is ommited
}
checkAccess
方法依次实现如下:
public final void checkAccess() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkAccess(this);
}
}
默认情况下,只要我得到任何线程,就允许修改任何其他线程
但是有没有办法在java.policy
文件中指定modifyThread
权限,以允许线程只修改自身
在java.policy
中,我可以找到唯一的grant{…}
部分。有没有办法拒绝这样的线程通信?为了让您能够控制谁可以调用Thread.interrupt()
,需要有一个适当的机制来管理这种访问。正如您所看到的,在Thread.interrupt()
中没有SecurityManager.checkPermission()
调用,因此这显然是不可能的。这是出于设计,因为策略旨在限制对代码源的访问,而不是线程(可以从多个源位置执行代码)。如果未授予代码源对特定策略的访问权限,则它永远无法运行受该策略保护的代码
相反,线程
访问由该方法调节。发件人:
确定当前运行的线程是否具有修改此线程的权限
如果有一个安全管理器,则调用其checkAccess
方法,并将此线程作为其参数
和SecurityManager.checkAccess(Thread)
准确描述了如何限制访问:
如果不允许调用线程修改线程参数,则引发一个SecurityException
通过类线程的stop
、suspend
、resume
、setPriority
、setName
和setDaemon
方法为当前安全管理器调用此方法。[原文如此。这还应包括中断]
。。。。如果thread参数不是系统线程,则此方法将静默返回
需要更严格策略的应用程序应覆盖此方法
好了。定义一个自定义的SecurityManager
,该管理器在checkAccess(Thread)
中引发异常,以限制谁可以中断或以其他方式修改线程
关于授予权限与拒绝权限的第二个问题,页面详细说明只有grant
语句。如何修改自身?唯一相关的操作是interrupt()、setName()、
和setPriority()
。这是你担心的问题之一吗?如果是这样,原因是什么?@VenkataRaju他知道,他在询问细粒度权限(这是不存在的)。@EJP我已经知道了。