我正在尝试理解Sonar规则squid:S1217,其中提到调用Thread.run()和Runnable.run()方法是一种不好的做法。我想知道可以使用Runnable.run()的场景。
答案 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()方法在内部调用,该方法负责多线程。