除了将 Runnable 传递给 Thread 的构造函数之外,它还用在哪里?
Where is Runnable used apart from passing it to Thread's constructor?
我试图理解 Sonar 规则 squid:S1217,其中提到调用 Thread.run() 和 Runnable.run() 方法是一种不好的做法。我想知道可以使用Runnable.run()的场景。
与其直接实例化 Threads,不如依赖 ExecutorServices(参见 Executor Interfaces in the Java tutorial). These take Runnables as parameters 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();
如果您直接调用 Thread.run() 或 Runnable.run() 它将作为一个简单的方法,因此您的程序中没有多线程行为。而这个方法在内部由负责多线程的 start() 方法调用。
我试图理解 Sonar 规则 squid:S1217,其中提到调用 Thread.run() 和 Runnable.run() 方法是一种不好的做法。我想知道可以使用Runnable.run()的场景。
与其直接实例化 Threads,不如依赖 ExecutorServices(参见 Executor Interfaces in the Java tutorial). These take Runnables as parameters 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();
如果您直接调用 Thread.run() 或 Runnable.run() 它将作为一个简单的方法,因此您的程序中没有多线程行为。而这个方法在内部由负责多线程的 start() 方法调用。