Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 除了将其传递给线程';谁的构造函数?_Java_Multithreading_Java 8_Sonarqube_Runnable - Fatal编程技术网

Java 除了将其传递给线程';谁的构造函数?

Java 除了将其传递给线程';谁的构造函数?,java,multithreading,java-8,sonarqube,runnable,Java,Multithreading,Java 8,Sonarqube,Runnable,我试图理解Sonar规则,其中提到调用Thread.run()和Runnable.run()方法是一种不好的做法。我想知道可以使用Runnable.run()的场景。与其直接实例化线程,不如依赖ExecutorServices(参见Java教程中的内容)。它们将可运行项作为参数 例如: ExecutorService executorService = Executors.newFixedThreadPool(10); executorService.execute(new Runnable(

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

与其直接实例化线程,不如依赖ExecutorServices(参见Java教程中的内容)。它们将可运行项作为参数

例如:

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()方法在内部调用

虽然调用
Thread.run()
确实是一种不好的做法,但我不同意在同一句话中命名
Runnable.run()
。毕竟,
Runnable
是一个普通接口,它的
run()
方法是一个普通方法。而且,如果你要实现一个执行者,你必须调用这个方法……这真的很让人困惑,在你的问题中,你说你想更好地理解声纳的违规行为,你接受了一个只给出最佳实践的答案,所以对我来说,这甚至是离题的,请至少重写您的问题,使其与您接受的答案一致接受的答案提供了一个实例,其中Runnable.run()是在线程构造函数之外使用的,这就是我所询问的。这甚至比我认为您在一个问题中有两个问题更糟,因此,您确实需要重写您的问题
Runnable
是表示潜在异步任务的标准抽象。它被
线程
(您可能应该避免使用)、任务管理框架(如
Executor
(您应该优先于
线程
)以及API希望表示独立任务的任何位置(如完成处理程序)使用