3 回答
TA贡献1993条经验 获得超5个赞
我认为这不是使用线程的正确方法。线程用于处理诸如分别运行 GUI 和应用程序逻辑之类的事情,因此 GUI 不会冻结。它们还用于运行分离的服务器和客户端线程。在此示例中,您实际上不会从线程中受益。此外,如果不使用执行程序,您将因为大量线程而耗尽内存(600 是可以的,但应该避免和限制)。只使用一个线程来不阻塞主程序或根本不使用线程。
理论上,多核处理器的性能实际上会提升,但这取决于多种因素。
将您的代码更改为如下所示:
public static void init() {
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 600 * 3; i++) {
names.add(NameGenerator.generateName());
}
}
}).start();
}
另外,使用这个例子,记住,线程是异步的,所以也提供某种回调函数来让你的程序注意到它是否重要。
也使用同步集合。
TA贡献1804条经验 获得超2个赞
当您同时修改 List 时,您将不得不为您的 List 使用同步结构。
作为更有效的替代方法,您可以创建一个实现类Runnable
并在其中声明一个List
包含生成词的字段。实例化该类的 3 个实例,将它们作为 Thread 启动并合并它们的List
结果。
您可以CountDownLatch
从客户端使用启动的线程将“倒计时”。它将简化执行合并的同步步骤。
添加回答
举报