我有一个类(比如说)Task.java
执行一些任务调度活动。
此类包含两种类型的活动 - 1)安排定期任务和2)安排非周期性任务。
周期性任务优先于非周期性。
public class Task implements Runnable{
ArrayList<> list;
public Task(ArrayList<> list){
this.list = list;
}
public void run(){
handlePeriodicTask(){...}
handleAPeriodicTask(){...}
}
}
在主类中,我有一个包含周期性和非周期性任务的全局任务列表。我将此列表拆分为两个子列表,每个子列表包含不同的周期性任务,但可能重复非周期性任务。我将这些子列表提供给在Task.java
public class Main{
ArrayList<> globalList;
//splitting globalList to get two sublists
ArrayList<> subList1;
ArrayList<> subList2;
public static void main(..){
Task task1 = new Task(subList1);
Task task2 = new Task(subList1);
new Thread(task1).start();
new Thread(task2).start();
}
}
我希望两个子列表中的所有周期性任务能够独立调度,无论是非周期性的(因为它们本质上是非周期性的),如果已经由另一个线程调度,则需要先验知识。如果是这样,当前线程应该忽略它们。
我不知道如何通过wait()
notify()
在两个不同实例上创建的两个线程上实现此通信。我已经看到了几个在单个实例上运行的wait()
notify()
的例子,但是如何在两个不同的实例上实现这一点。我不太熟悉多线程,所以这个问题可能很愚蠢/无效,但我希望得到适当的指导。
有人请指导我。
感谢。
答案 0 :(得分:0)
永远不要独立启动线程,如果您尝试实现的解决方案将导致生成太多线程。最好使用线程池管理器(Executor Service
- Link)。这将帮助您实现多种功能 - 以更加可控的方式启动线程,根据环境配置线程数(poolize),以及跨所有平台管理线程的可靠机制。您可以将所有定期任务提供给ExecutorService
以启动。