我們提供了乙個類:
public class foo
public void two()
public void three()
}三個不同的執行緒將會共用乙個 foo 例項。
執行緒 a 將會呼叫 one() 方法
執行緒 b 將會呼叫 two() 方法
執行緒 c 將會呼叫 three() 方法
請設計修改程式,以確保 two() 方法在 one() 方法之後被執行,three() 方法在 two() 方法之後被執行。
示例 1:
輸入: [1,2,3]
輸出: "onetwothree"
解釋:
有三個執行緒會被非同步啟動。
輸入 [1,2,3] 表示執行緒 a 將會呼叫 one() 方法,執行緒 b 將會呼叫 two() 方法,執行緒 c 將會呼叫 three() 方法。
正確的輸出是 "onetwothree"。
示例 2:
輸入: [1,3,2]
輸出: "onetwothree"
解釋:
輸入 [1,3,2] 表示執行緒 a 將會呼叫 one() 方法,執行緒 b 將會呼叫 three() 方法,執行緒 c 將會呼叫 two() 方法。
正確的輸出是 "onetwothree"。
注意:儘管輸入中的數字似乎暗示了順序,但是我們並不保證執行緒在作業系統中的排程順序。
你看到的輸入格式主要是為了確保測試的全面性。
題目的意思是三個執行緒輪流同步列印,用乙個共享變數來控制當前工作的執行緒,使用乙個同步鎖以及三個條件變數來依次執行執行緒。
public class foo
private int number;
private lock lock = new reentrantlock();
private condition condition1 = lock.newcondition();
private condition condition2 = lock.newcondition();
private condition condition3 = lock.newcondition();
public void first(runnable printfirst) throws interruptedexception
printfirst.run();
number = 2;
condition2.signal();
} catch (exception e) finally
}public void second(runnable printsecond) throws interruptedexception
printsecond.run();
number = 3;
condition3.signal();
} catch (exception e) finally
}public void third(runnable printthird) throws interruptedexception
printthird.run();
number = 1;
condition1.signal();
} catch (exception e) finally
}}
leetcode1114按序列印
我們提供了乙個類 public class foo public void two public void three 三個不同的執行緒將會共用乙個 foo 例項。執行緒 a 將會呼叫 one 方法 執行緒 b 將會呼叫 two 方法 執行緒 c 將會呼叫 three 方法 請設計修改程式,以確保 ...
leetcode1114 按序列印
我們提供了乙個類 public class foo public void two public void three 三個不同的執行緒將會共用乙個 foo 例項。執行緒 a 將會呼叫 one 方法 執行緒 b 將會呼叫 two 方法 執行緒 c 將會呼叫 three 方法 請設計修改程式,以確保 ...
Leetcode刷題1114 按序列印
我們提供了乙個類 public class foo public void second public void third 三個不同的執行緒將會共用乙個 foo 例項。執行緒 a 將會呼叫 first 方法 執行緒 b 將會呼叫 second 方法 執行緒 c 將會呼叫 third 方法 請設計修...