gpt4 book ai didi

java - java中多线程的并行执行

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:36 26 4
gpt4 key购买 nike

我必须同时执行我的类的多个实例。我在下面编写了以下代码。我用两种方式做到了。但我看不出有什么区别。并行运行线程的正确方法是什么?

谢谢。

这里是片段:

public class MyClass {

public MyClass() {
runnable = true;
}

public boolean isRunnable() {
return runnable;
}

public static void main(String[] args) throws InterruptedException {

/* METHOD 1
MyClass myclass = new MyClass();

if (myclass.isRunnable()) {
for (int i = 0; i < loop; i++) {
myclass.execTask();
Thread.sleep(sleep);
}
}
*/

//METHOD 2
final MyClass myclass = new MyClass();


ExecutorService threadPool = Executors.newFixedThreadPool(threadNo);

for (int i = 0; i < threadNo; i++) {
threadPool.submit(new Runnable() {
public void run() {
for (int i = 0; i < loop; i++) {
myclass.execTask();
try {
Thread.sleep(sleep);
} catch (InterruptedException ex) {
Logger.getLogger(MyClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
}
threadPool.shutdown();

public void execTask(){
.........
}
}
}

最佳答案

这两种方法的区别在于,在“方法 2”中,您实际上可能有多个执行线程(假设 threadNo 大于 1)。方法 2 允许多个工作线程获取一个 Runnable 并并行(准确地说是并发)调用 execTask(通过调用 run)。 “方法 2”中的暂停几乎没有任何作用。

“方法 1”完全在“主”线程上执行。它调用 execTask,等待,然后再次调用它。这将连续多次调用执行。

(我假设这是伪代码,因为它的一部分无法编译。)

这是经过清理的“方法 2”。请注意,我有 threadNo 工作线程(如果它大于 1,它会有所帮助)并且我创建了 loop Runnables

ExecutorService threadPool = Executors.newFixedThreadPool(threadNo);

for (int i = 0; i < loop; i++) {
threadPool.submit(new Runnable() {
public void run() { myclass.execTask(); });
}

关于java - java中多线程的并行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19770721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com