gpt4 book ai didi

java - 难以理解 Java 线程

转载 作者:行者123 更新时间:2023-11-29 09:49:58 26 4
gpt4 key购买 nike

我从 Python 学习了多处理,但在理解 Java 的方法时遇到了一些困难。在 Python 中,我可以说我想要一个包含 4 个进程的池,然后将一堆工作发送到我的程序,它一次将处理 4 个项目。我意识到,对于 Java,我需要使用线程来完成同样的任务,到目前为止它似乎工作得非常好。

但是.. 与 Python 不同,我的 cpu 没有获得 100% 的利用率(它们大约是 70-80%),我怀疑这是我创建线程的方式(代码在 Python/Java 和进程是独立的)。在 Java 中,我不确定如何创建一个线程,所以我为要处理的列表中的每个项目创建一个线程,如下所示:

    for (int i = 0; i < 500; i++) {
Runnable task = new MyRunnable(10000000L + i);
Thread worker = new Thread(task);
// We can set the name of the thread
worker.setName(String.valueOf(i));
// Start the thread, never call method run() direct
worker.start();
// Remember the thread for later usage
threads.add(worker);
}

我从 here 拿来的.我的问题是这是启动线程的正确方法,还是有办法让 Java 本身管理线程数以使其达到最佳状态?我希望我的代码尽可能快地运行,并且我正在尝试了解如何判断和解决可能因创建的线程过多而引起的任何问题。

这不是主要问题,只是想知道它在 Java 引擎盖下是如何工作的。

最佳答案

您使用 Executor ,它的实现处理线程池,决定有多少,等等。参见 the Java tutorial有很多例子。

一般情况下,除了非常简单的事情外,Java 中不使用裸线程。相反,会有一些更高级别的 API 接收您的 Runnable 或 Task 并知道该做什么。

关于java - 难以理解 Java 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9508272/

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