【问题标题】:the synchronized issue involving in multi-threaded application--java多线程应用程序中的同步问题--java
【发布时间】:2015-06-18 05:56:17
【问题描述】:

以下是来自网上的面试题:

设计一个任务调度系统,包括一个任务队列和两个函数。

(1) 功能:触发任务。这个负责调用任务队列中的所有任务。

(2) 功能:添加任务。在调用 triggerTask 函数之前, addTask 将任务添加到队列中。调用 triggerTask 函数后,addTask 只是调用任务。

以下是我的回答:

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();
          }
   }

接下来的问题是,如果您希望您的设计在多线程情况下运行,该怎么办?我有点失去它。以上代码在多线程情况下运行有问题吗?如果是,如何解决?

【问题讨论】:

    标签: java multithreading synchronization


    【解决方案1】:

    当Thread1调用triggerTask()时,布尔变量trigger会被设置为true,但是Thread2调用addTask()可能会从缓存中读取trigger的值,所以它不会看到它的值是true。为避免这种情况,您需要将 trigger 声明为 volatile。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多