gpt4 book ai didi

java - 在 Java 中创建多线程的正确方法?

转载 作者:行者123 更新时间:2023-11-29 03:52:16 25 4
gpt4 key购买 nike

我有一个类,它实现了Runnable 接口(interface)。我想为该类创建多个线程,我发现了两种创建多线程的方法:

  class MyRunnable implements Runnable {
public void run() {
System.out.println("Important job running in MyRunnable");
}
}

1.第一种方法:

    public class TestThreads {
public static void main (String [] args) {
MyRunnable r = new MyRunnable();
Thread foo = new Thread(r);
Thread bar = new Thread(r);
Thread bat = new Thread(r);
foo.start();
bar.start();
bat.start();
}
}

2.第二种方法:

public class TestThreads 
{
public static void main (String [] args)
{
Thread[] worker=new Thread[3];
MyRunnable[] r = new MyRunnable[3];

for(int i=0;i<3;i++)
{
r[i] = new MyRunnable();
worker[i]=new Thread(r[i]);
worker[i].start();

}
}
}

哪一个是最好的使用方法,两者之间有什么区别?

问候

最佳答案

在您的示例中,runnable 没有实例状态,因此您不需要它的多个实例。

否则我更喜欢第二种方法,因为每次你连续多次剪切和粘贴一行代码时,循环通常是更好的主意。

通常,您应该等待您启动的线程。

public class TestThreads {
public static void main (String [] args) {
Thread[] worker=new Thread[3];
Runnable r = new MyRunnable();

for(int i=0;i<3;i++) {
worker[i]=new Thread(r);
worker[i].start();
}

for(int i=0;i<3;i++) {
worker[i].join();
worker[i] = null;
}
}

下一步将使用 ExecutorService Java 5+。您不想也不需要在现代 Java 中管理您自己的线程。

int poolSize = 3;
int jobCount = 3;
Runnable r = new MyRunnable()
ExecutorService pool = Executors.newFixedThreadPool(poolSize);
for (int i = 0; i < jobCount; i++) {
pool.execute(r);
}
pool.shutdown();

关于java - 在 Java 中创建多线程的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8223223/

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