如何限制特定线程对方法的访问?

时间:2018-05-12 15:17:43

标签: java multithreading

在一次采访中,我被要求提出一种方法,该方法将确保当线程T1和T3可以访问类的方法时,T2无法访问该方法。

我无法为此提供任何解决方案。你能举一个解释的例子吗?

我后来提出了以下解决方案。它有效吗?

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();
            }
        }

    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用protected modifier,如下面的代码。 T1可以通过扩展Main类来调用aMethod(),但是T2不能调用aMethod()。


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()
    }

}