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我已经知道了。