LoginSignup
0
0

java複数のスレッドの同期処理

Posted at

java Thread

スレッドとは、プログラム内での実行スレッドのことです。Java仮想マシンでは、アプリケーションは並列に実行される複数のスレッドを使用することができます。

synchronized

synchronizedブロックの開始時にsynchronized文で指定したオブジェクトのロックを取得し、終了時にそのロックを開放します。

wait

ほかのスレッドがこのオブジェクトの notify() メソッドまたは notifyAll() メソッドを呼び出すまで、現在のスレッドを待機させます。

notify

このオブジェクトのモニターで待機中のスレッドを 1 つ再開します。

notifyAll

このオブジェクトのモニターで待機中のすべてのスレッドを再開します。

実装確認

2つのスレッドで1~100の数字を交替で順番に出力します。

package com.example.thread;

class PrintNumber implements Runnable {
  private int number = 1;
  @Override
  public void run() {
    while(true){
      synchronized (this){
        if(number <= 100){
          notify();
          try {
            Thread.sleep(100);
          } catch (InterruptedException e) {
            throw new RuntimeException(e);
          }
          System.out.println(Thread.currentThread().getName() + ":" + number);
          number ++;

          try {
            wait();
          } catch (InterruptedException e) {
            throw new RuntimeException(e);
          }
        } else {
          break;
        }
      }
    }
  }
}
public class ThreadTest {
  public static void main(String[] args) {
    PrintNumber p = new PrintNumber();

    Thread t1 = new Thread(p, "Thread 1");
    Thread t2 = new Thread(p, "Thread 2");

    t1.start();
    t2.start();
  }
}

実行結果

> Task :ThreadTest.main()
Thread 1:1
Thread 2:2
Thread 1:3
Thread 2:4
Thread 1:5
Thread 2:6
Thread 1:7
Thread 2:8
Thread 1:9
Thread 2:10
Thread 1:11
Thread 2:12
Thread 1:13
Thread 2:14
Thread 1:15
Thread 2:16
Thread 1:17
Thread 2:18
Thread 1:19
Thread 2:20
Thread 1:21
Thread 2:22
Thread 1:23
Thread 2:24
Thread 1:25
Thread 2:26
Thread 1:27
Thread 2:28
Thread 1:29
Thread 2:30
Thread 1:31
Thread 2:32
Thread 1:33
Thread 2:34
Thread 1:35
Thread 2:36
Thread 1:37
Thread 2:38
Thread 1:39
Thread 2:40
Thread 1:41
Thread 2:42
Thread 1:43
Thread 2:44
Thread 1:45
Thread 2:46
Thread 1:47
Thread 2:48
Thread 1:49
Thread 2:50
Thread 1:51
Thread 2:52
Thread 1:53
Thread 2:54
Thread 1:55
Thread 2:56
Thread 1:57
Thread 2:58
Thread 1:59
Thread 2:60
Thread 1:61
Thread 2:62
Thread 1:63
Thread 2:64
Thread 1:65
Thread 2:66
Thread 1:67
Thread 2:68
Thread 1:69
Thread 2:70
Thread 1:71
Thread 2:72
Thread 1:73
Thread 2:74
Thread 1:75
Thread 2:76
Thread 1:77
Thread 2:78
Thread 1:79
Thread 2:80
Thread 1:81
Thread 2:82
Thread 1:83
Thread 2:84
Thread 1:85
Thread 2:86
Thread 1:87
Thread 2:88
Thread 1:89
Thread 2:90
Thread 1:91
Thread 2:92
Thread 1:93
Thread 2:94
Thread 1:95
Thread 2:96
Thread 1:97
Thread 2:98
Thread 1:99
Thread 2:100
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0