[英]Trouble understanding Java threads
抱歉,我从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);
}
我从这里拿走的。 我的问题是这是启动线程的正确方法,还是有办法让java本身来管理线程数,使其达到最佳状态? 我和我猜想的每个人一样,我希望我的代码尽可能快地运行,并且我试图理解如何分辨和解决可能由于创建过多线程而引起的任何问题。 这不是主要问题,只是对它在Java引擎下的工作方式感到好奇。
谢谢!
线程是“低级” API。
根据您要执行的操作以及所使用的Java版本,它们是更好的解决方案。 如果您使用Java 7,并且如果您的任务允许,则可以使用fork / join框架: http : //docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html
但是,请看一下Java并发教程: http : //docs.oracle.com/javase/tutorial/essential/concurrency/executors.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.