マルチスレッドプログラミングに関する基本情報がありますので、このトピックを改善し、デバッグモードを動作させるのには努力しましたが、正しく動作しません。マルチスレッドの動作時にデバッグが正しく動作しない理由
コード例:
public class MultiThreadsExample implements Runnable {
private Thread t;
private String threadName;
//私はスレッド
public static void main(String[] args) {
MultiThreadsExample thread1=new MultiThreadsExample("Thread-1");
thread1.start();
MultiThreadsExample thread2=new MultiThreadsExample("Thread-2");
thread2.start();
}
//runnable interface override method
@Override
public void run() {
System.out.println("Running thread name:" + threadName);
for (int i = 0; i < 4; i++) {
System.out.println("Working thread: " + i + " " + threadName);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
Logger.getLogger(MultiThreadsExample.class.getName()).log(Level.SEVERE, null, ex);
}
}
System.out.println("Thread " + threadName + " interrupted.");
}
public void start() {
System.out.println("Starting " + threadName);
if (t == null) {
t = new Thread(this, threadName);
t.start();
}
}
出力作成するコンストラクタメソッドがあります。私が思うあなたのコメントから
Creating thread name:Thread-1 Starting Thread-1 Creating thread name:Thread-2 Starting Thread-2 Running thread name:Thread-1 Working thread: 0 Thread-1 Working thread: 1 Thread-1 Working thread: 2 Thread-1 Working thread: 3 Thread-1 Thread Thread-1 interrupted. Running thread name:Thread-2 Working thread: 0 Thread-2 Working thread: 1 Thread-2 Working thread: 2 Thread-2 Working thread: 3 Thread-2 Thread Thread-2 interrupted.
あなたは何を期待していましたか? – cHao
デバッグモードで同期して動作しますが、シリアルで動作します。 – SerefAltindal
シリアルで実行されるスレッドは、可能であり、依然として正しい結果です。スレッドを使用するときは、スレッドをいつ/どのように実行するかを制御することができます。そのコントロールを元に戻すには、 'java.util.concurrent'の内容を見てください。 (ちょうどインタリーブされたものを見たいのであれば、かなり長い時間眠るのに役立つかもしれませんが、私は通常このような例では1秒の遅延を使います) – cHao