Java 仅当队列中有内容时才消耗cpu的工作线程
这就是我要做的 我想要一个对象,它有一个队列并启动一个线程。另一个线程可以通过执行object.addWork(work)推送到该队列 这将把工作推到队列中,并在线程处于休眠状态时唤醒它。然后,线程对队列中的每个对象执行工作,直到队列为空 一旦队列为空并且没有剩余工作,该线程将休眠,需要通过再次添加到队列来唤醒该线程Java 仅当队列中有内容时才消耗cpu的工作线程,java,multithreading,queue,Java,Multithreading,Queue,这就是我要做的 我想要一个对象,它有一个队列并启动一个线程。另一个线程可以通过执行object.addWork(work)推送到该队列 这将把工作推到队列中,并在线程处于休眠状态时唤醒它。然后,线程对队列中的每个对象执行工作,直到队列为空 一旦队列为空并且没有剩余工作,该线程将休眠,需要通过再次添加到队列来唤醒该线程 有没有线程安全的方法来创建这样一个对象?您基本上想要的是执行器。newSingleThreadExecutor可以做什么 class YouNameIt{ private
有没有线程安全的方法来创建这样一个对象?您基本上想要的是
执行器。newSingleThreadExecutor
可以做什么
class YouNameIt{
private ExecutorService executor;
public void start(){
executor = Executors.newSingleThreadExecutor();
}
public void put(Object o){
executor.submit(new Runnable() {
@Override
public void run() {
process(o);
}
});
}
private void process(Object o) {
//Put your processing here
}
public void stop(){
executor.shutdown();
}
}
基本上,您想要的是执行者所能做的
class YouNameIt{
private ExecutorService executor;
public void start(){
executor = Executors.newSingleThreadExecutor();
}
public void put(Object o){
executor.submit(new Runnable() {
@Override
public void run() {
process(o);
}
});
}
private void process(Object o) {
//Put your processing here
}
public void stop(){
executor.shutdown();
}
}
您基本上需要一个
阻塞队列
;这就是这个接口(和实现)要做的事情。@fge说的——选择BlockingQueue的任何实现和ExecutorService的任何实现您基本上想要一个BlockingQueue
;这就是这个接口(和实现)要做的事情。@fge说的——选择BlockingQueue的任何实现和ExecutorService的任何实现