Java 如何限制特定线程对方法的访问?
在一次采访中,我被要求提出一种方法,确保线程T1和T3可以访问类的方法,而T2不能访问该方法 我无法提供任何解决方案。你能举个例子解释一下吗 我后来提出了以下解决方案。效率高吗Java 如何限制特定线程对方法的访问?,java,multithreading,Java,Multithreading,在一次采访中,我被要求提出一种方法,确保线程T1和T3可以访问类的方法,而T2不能访问该方法 我无法提供任何解决方案。你能举个例子解释一下吗 我后来提出了以下解决方案。效率高吗 package JavaProgramming; public class EligibleThread implements Runnable { public void method1() { System.out.println("Hello"); } public s
package JavaProgramming;
public class EligibleThread implements Runnable {
public void method1() {
System.out.println("Hello");
}
public static void main(String[] args) {
EligibleThread t1 = new EligibleThread();
EligibleThread t2 = new EligibleThread();
Thread t11 = new Thread(t1, "t1");
Thread t22 = new Thread(t2, "t2");
t11.start();
t22.start();
}
public void run() {
if (Thread.currentThread().getName() != "t2") {
method1();
} else{
try {
throw new Exception("Access is denied");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
您可以使用受保护的修饰符,如下面的代码。T1可以通过扩展主类来调用aMethod(),但T2不能调用aMethod() 公共班机{ 受保护的无效方法(){ } } 类T1扩展了可运行的主实现{ @凌驾 公开募捐{ aMethod(); } } 类T2实现可运行的{ @凌驾 公开募捐{ //这里不能呼叫Main.aMethod() } }
听起来与线程无关。如何阻止从某个地方访问,但允许从另一个地方访问?:)@DreamspacePresident根据您的评论,稍后我提出了上面的代码片段(包含在我的帖子中)。我认为您提供了一个不错的解决方案。但也请参见:谢谢@Sam的回答。 public class Main { protected void aMethod() { } } class T1 extends Main implements Runnable{ @Override public void run() { aMethod(); } } class T2 implements Runnable{ @Override public void run() { // here can't call Main.aMethod() } }