怎样实现Runnable的run()不被其他类调用

img

由于run()是public的,默认会被其他类调用,但是目前的需求是,run()只容许本类中调用,不要被其他任何类调用,相当于变成私有的,怎么实现呢

用内部类或者匿名内部类,创建一个内部类,该类实现Runnable接口,并在其中实现run()方法。将该内部类作为私有成员变量添加到需要运行Runnable的类中,并且只在需要的时候创建和启动该内部类的实例

public class MyClass {
    private class MyRunnable implements Runnable {
        @Override
        public void run() {
            // 实现 run() 方法的代码
        }
    }

    public void startRunnable() {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start();
    }
}

可以把TestLog类改成私有的

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/525280
  • 你也可以参考下这篇文章:通过实现Runnable接口创建,开启,休眠和中断线程。
  • 除此之外, 这篇博客: 待解决问题中的 实现Runnable接口,重写run方法; 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • public class Main {
        public static void main(String[] args) {
                Thread th = new Thread(new MyThread());
            	th.start();
            }
    }
    
    class MyThread implements Runnable{
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"方式一");
        }
    }