是否可以控制每个线程在Java中执行的时间量?

我想控制每个线程使用的时间量.

一个线程执行一些处理,另一个线程处理数据库中的数据,但由于生成的数据量,插入比处理慢.我想给予更多处理器时间来插入数据.

用线程可以做到这一点吗?目前,我正在线程中进行处理,但插入时间根据机器而变化.还有其他方法可以做到这一点吗?是否涉及在我的程序中使用线程同步?

解决方法:

首先要提到的是线程优先级本身并不意味着“CPU的份额”.关于线程优先级实际意味着什么似乎存在很多混淆,部分原因是它实际上意味着不同操作系统下的不同事物.如果您在Linux中工作,它实际上确实意味着接近CPU的相对份额.但在Windows下,它肯定没有.所以,如果它有任何帮助,你可能首先想看一下我刚刚编写的关于thread priorities in Java的一些信息,这解释了Thread Priorities在不同系统上的实际意义.

你的问题的一般答案是,如果你想让一个线程占用CPU的特定份额,最好以编程方式隐式地执行:定期地,对于处理的每个“块”,测量经过的时间(或者CPU的数量)使用 – 他们并不严格地讲同样的事情),然后睡觉适当的时间,使处理/睡眠比率大约达到你想要的处理时间的百分比.

但是,我不确定这实际上会对你的任务有所帮助.

据我所知,基本上你有一个插入任务,这是速率确定步骤.在平均情况下,系统不太可能“故意将更少的CPU专用于运行该插入的线程”.

因此,查看插入任务可能会有更多的里程,并且可以通过编程方式查看插入任务的功能.例如:您可以批量插入吗?如果插入过程由于某种原因(我怀疑)确实是CPU绑定的,你可以多线程吗?为什么你的应用程序实际上关心等待插入完成,你能改变这种依赖吗?

如果插入到标准数据库系统,我想知道插入是否非常受CPU限制?

上一篇:Callable和Future


下一篇:Executor家族一览