多线程应用中的同步问题——java
以下是一个来自网上的采访问题: 设计了一个包含任务队列和两个功能的任务调度系统 1功能:触发任务。这个任务负责调用任务队列中的所有任务 2功能:添加任务。在调用triggerTask函数之前,addTask会将task添加到队列中。调用triggerTask函数后,addTask只调用任务 以下是我的答案:多线程应用中的同步问题——java,java,multithreading,synchronization,Java,Multithreading,Synchronization,以下是一个来自网上的采访问题: 设计了一个包含任务队列和两个功能的任务调度系统 1功能:触发任务。这个任务负责调用任务队列中的所有任务 2功能:添加任务。在调用triggerTask函数之前,addTask会将task添加到队列中。调用triggerTask函数后,addTask只调用任务 以下是我的答案: class TriggerTask { Queue<Task> q; boolean triggered = false; addTask(Task
class TriggerTask {
Queue<Task> q;
boolean triggered = false;
addTask(Task t) {
if (triggered == true) {
t.invoke();
}
else {
q.offer(t);
}
}
triggerTask() {
triggered = true;
while (!q.isEmpty()) {
q.poll().invoke();
}
}
接下来的问题是,如果希望设计在多线程情况下运行,该怎么办?我把它弄丢了。以上代码在多线程情况下运行是否有任何问题?如果是,如何解决?当Thread1调用triggerTask时,触发的布尔变量将设置为true,但调用addTask的Thread2可能会从缓存中读取触发的值,因此它不会将其值视为true。为了避免这种情况,您需要将triggered声明为volatile