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

可以控制每个线程在Java中执行的时间吗?,java,multithreading,callable,Java,Multithreading,Callable,我想控制每个线程使用的时间量 一个线程执行一些处理,另一个线程处理数据库中的数据,但是由于生成的数据量,插入比处理慢。我想给处理器更多的时间来插入数据 是否可以使用线程执行此操作?目前,我正在线程中进行休眠处理,但是插入时间会根据机器的不同而变化。还有别的办法吗?是否在我的程序中使用线程同步的方法?一种方法是将处理线程的优先级设置为低于另一种。但请注意,不建议这样做,因为它无法保持代码平台的独立性。(不同的线程优先级在不同的平台上表现不同) 另一种方法是使用一种服务,其中数据库线程将不断发送有关

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

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


是否可以使用线程执行此操作?目前,我正在线程中进行休眠处理,但是插入时间会根据机器的不同而变化。还有别的办法吗?是否在我的程序中使用线程同步的方法?

一种方法是将处理线程的优先级设置为低于另一种。但请注意,不建议这样做,因为它无法保持代码平台的独立性。(不同的线程优先级在不同的平台上表现不同)

另一种方法是使用一种服务,其中数据库线程将不断发送有关其当前状态的消息(可能是某个标记“aboutToOver”)


或者使用同步,比如二进制信号量。当数据库线程工作时,另一个线程将被阻塞,因此db线程将使用所有资源。但同时处理线程也会被阻塞。实际上,这将是最好的解决方案,因为ProcessSign线程可以执行3-4个任务,然后会被信号量阻塞,直到稍后它可以再次启动并执行任务时,您可以使用增加线程的优先级,但这并不理想

也许您可以使用某种形式的命令使一个线程等待另一个线程执行某些操作。例如,一个线程可以用来从一个线程向另一个线程发送一条消息,表示它现在可以做一些事情了


另一种方法是使用可运行文件而不是线程,并将可运行文件提交给执行器,例如。这个执行器的作用是确保可运行程序使用了相当长的时间。

首先要提到的是线程优先级本身并不意味着“CPU份额”。关于线程优先级到底意味着什么,人们似乎有很多困惑,部分原因是它在不同的操作系统下实际上意味着不同的东西。如果您在Linux中工作,它实际上意味着接近CPU的相对份额。但在Windows下,它肯定不会。因此,如果有任何帮助,您可能首先想看看我刚才编译的一些信息,这些信息解释了线程优先级在不同系统上的实际含义

对您的问题的一般回答是,如果您希望线程占用特定的CPU份额,最好以编程方式隐式地这样做:周期性地,对于每个“块”处理,测量经过的时间(或者使用了多少CPU——严格来说,它们不是同一件事),然后适当的睡眠时间,使处理/睡眠比率达到您预期处理时间的%左右

然而,我不确定这是否真的能帮助你完成任务

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

因此,查看插入任务并查看是否可以通过编程方式更改插入任务的工作方式,可能会有更多的好处。例如:您可以插入更大的批次吗?如果由于某种原因(我对此表示怀疑),插入过程确实是CPU受限的,那么您可以多线程执行它吗?为什么您的应用程序实际上关心等待插入完成,您可以更改这种依赖关系吗

如果插入到一个标准的DB系统,我想知道插入是否严重受限于CPU