除了将Runnable传递给Thread的构造函数之外,Runnable在哪里使用?

时间:2016-06-06 12:03:49

标签: java multithreading java-8 sonarqube runnable

我正在尝试理解Sonar规则squid:S1217,其中提到调用Thread.run()和Runnable.run()方法是一种不好的做法。我想知道可以使用Runnable.run()的场景。

2 个答案:

答案 0 :(得分:5)

您应该依赖ExecutorServices(请参阅Java教程中的Executor Interfaces),而不是直接实例化Threads。这些将Runnables作为参数in some of their methods

示例:

ExecutorService executorService = Executors.newFixedThreadPool(10);

executorService.execute(new Runnable() {
    public void run() {
        System.out.println("Asynchronous task");
    }
});

// alternative Java 8 lambda syntax:
executorService.execute(() -> System.out.println("Asynchronous task"));

executorService.shutdown();

答案 1 :(得分:0)

如果直接调用Thread.run()或Runnable.run(),它将作为一个简单的方法,因此程序中没有多线程行为。此方法由start()方法在内部调用,该方法负责多线程。