基本的には、メソッドを呼び出した後にスレッドを一時停止してから、もう一方のスレッドに移ります。私はループすることはできません、私の方法は一度だけ実行することができます。 これの背後にある考え方は、メソッドがメッセージを表示するゲームで使用され、ユーザーがキーを押すたびに次のメッセージが表示されます。ゲームがユーザーからの入力を受け入れるので、私はリストを通過することはできません。 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」が印刷されるかどうかを確認するためにテストしていたので、印刷しないでください。しかし、それは印刷されます –