我正在实施一个包含不同任务的程序,并且都实现了 Runnable。例如,有一个任务在数据库上工作并将一些元组发送到同步共享内存,随后,有另一个线程检查共享内存并将消息发送到队列。此外,这两个线程在无限 while 循环中进行迭代。
我已经使用了 fixedThreadPool 来执行这些线程。
问题在于,有时程序控制权仍保留在第一个正在运行的线程中,而第二个线程永远没有机会进入其运行状态。
这是我的类似示例代码:
public class A implements Runnable {
@Override
public void run() {
while(true) {
//do something
}
}
}
public class B implements Runnable {
@Override
public void run() {
while(true) {
//do something
}
}
}
public class Driver {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(2);
A a = new A();
executorService.execute(a);
B b = new B();
executorService.execute(b);
}
}
我还做了一些棘手的事情,让第一个线程在运行一小段时间后休眠一次。结果,它使第二个线程找到了运行的机会。但是对于这个问题,有没有什么格式良好的解决方案呢?您认为问题出在哪里?
汪汪一只猫
天涯尽头无女友
相关分类