基本上我想在調用方法之後暫停我的線程,然後繼續執行另一個方法。我無法循環,我的方法只能運行一次。 這個想法背後,是用在遊戲中,方法將顯示消息,並且每當用戶按下一個鍵時,就會顯示下一條消息。我不能僅僅通過一個列表,因爲遊戲需要用戶輸入。我看着Thread.pause()
和Thread.resume()
但他們不會工作,並已棄用。 我當前的代碼(這是不工作):在調用方法後暫停線程
private Thread thread;
private Thread managerThread;
private final Object lock = new Object();
private boolean shouldThreadRun = true;
private boolean storyRunning = true;
public Storyline() {
setUpThread();
}
private void setUpThread() {
managerThread = new Thread(() -> {
while(storyRunning) {
synchronized (lock) {
if(!shouldThreadRun) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Looping");
}
}
});
thread = new Thread(() -> {
synchronized (lock) {
pauseThread();
System.out.print("A");
pauseThread();
System.out.print("B");
}
});
managerThread.start();
thread.start();
}
public void pauseThread() {
shouldThreadRun = false;
}
public void resumeThread() {
shouldThreadRun = true;
}
你不會在我看到的任何地方調用'resumeThread()'。另外,如果要由不同的線程修改和讀取'shouldThreadRun',則應聲明'volatile'。 –
https://docs.oracle.com/javase/tutorial/essential/concurrency/join.html –
因爲我正在測試以查看'B'是否打印過,因爲它不應該打印。但它確實被打印 –