LeetCode 按序列印

2022-03-11 01:52:43 字數 2222 閱讀 5896

第1114題

我們提供了乙個類:

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 sub1114 ;

//生成結果字串

stringbuffer result = new stringbuffer();

foo foo = new foo();

thread threads = new thread[runorder.length];

for (int i = 0; i < runorder.length; ++i) else if (runorder[i] == 2) else if (runorder[i] == 3)

thread.start();

threads[i] = thread;

}//等侍所有執行緒執行完

for (int i = 0; i < threads.length; i++)

//輸出結果串

system.out.println(result.tostring());

}}class firstthread extends thread

@override

public void run() catch (interruptedexception e)

}}class secondthread extends thread

@override

public void run() catch (interruptedexception e)

}}class thirdthread extends thread

@override

public void run() catch (interruptedexception e)

}}class foo

public void first(runnable printfirst) throws interruptedexception

printfirst.run();

//定義成員變數為 1

flag = 1;

//喚醒其餘所有的執行緒

lock.notifyall();}}

public void second(runnable printsecond) throws interruptedexception

printsecond.run();

//如果成員變數為 1 ,則代表first執行緒剛執行完,所以執行second,並且改變成員變數為 2

flag = 2;

//喚醒其餘所有的執行緒

lock.notifyall();}}

public void third(runnable printthird) throws interruptedexception

//如果成員變數為 2 ,則代表second執行緒剛執行完,所以執行third,並且改變成員變數為 0

printthird.run();

flag = 0;

lock.notifyall();}}

}

Leetcode 1114 按序列印

我們提供了乙個類 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 方法 請設計修改程式,以確保 ...

leetcode1114 按序列印

我們提供了乙個類 public class foo public void two public void three 三個不同的執行緒將會共用乙個 foo 例項。執行緒 a 將會呼叫 one 方法 執行緒 b 將會呼叫 two 方法 執行緒 c 將會呼叫 three 方法 請設計修改程式,以確保 ...