揮発性のブール値を使ってスレッドのアクションを停止/開始/再開するフラグとして機能するよう試みましたが、動作しません。永遠に続くだけで終わらない。これを正しく行う方法や私のコードがうまくいかない理由についての助けがあれば、大歓迎です。前もって感謝します。フラグを使用してスレッド内のアクションを再開するにはどうすればよいですか?
public class thread {
public static int i = 0;
private static Thread print = null;
private static printThread runnable = null;
public static void main(String[] args) {
runnable = new printThread();
print = new Thread (runnable);
print.start();
System.out.println("Starting");
runnable.begin();
if(i > 5)
{
runnable.terminate();
}
i = 10;
runnable.begin();
if(i > 15)
{
runnable.terminate();
}
}
public static final void print()
{
System.out.println(i);
i++;
}
public static final class printThread implements Runnable {
private volatile boolean running = false;
public void terminate() {
running = false;
}
public void begin() {
running = true;
}
public boolean isRunning() {
return running;
}
public void run() {
while(true)
{
if(running)
{
print();
}
else
{
}
}
}
}
}
"うまくいかない"というのはむしろあいまいです。あなたの質問を編集して、プログラムの予想される動作を拡張してください。そして、[並行性](https://docs.oracle.com/javase/tutorial/essential/concurrency/)について実際に自分自身に知らせるべきです。 – Paul
'terminate()'は決して呼び出されないことがあります。たとえば、メイン関数が 'i'が5になる前に本体を実行しました。 – Tsyvarev