wait と notify

import java.io.*;

public class Test extends Thread {
	static int total_1 = 0, total_2 = 0;
/*
     main method
*/
	public static void main (String[] args) throws IOException
	{
		int i1, k = 0;
					// 自分自身のオブジェクト
		Test test = new Test();
					// Threadオブジェクトの生成
		Thread t1 = new Thread(test, "***");
		t1.setPriority(6);   // プライオリティを上げる
		Thread t2 = new Thread(test, "---");
					// スレッドの実行開始
		t1.start();
		t2.start();
					// スレッドの状況のチェック
		while (t1.isAlive() || t2.isAlive()) {
			k++;
			System.out.println("k " + k + " " + Math.sqrt((double)k));
		}
					// スレッドの終了後の処理
		System.out.println("   終了しました(total_1 " + total_1 + " total_2 " + total_2 + ")");
	}
/*
     スレッドの実行内容の記述(スレッドがスタートすると,
     このメソッドに記述されたことが実行されます)
     スレッド間の同期をとるためにsynchronized指定が必要
     同期をとれば,あるスレッドの実行中に他のスレッドが割り込むことはない
*/
	public synchronized void run()
	{
		int i1;
		System.out.println(Thread.currentThread().getName() + " が実行中");
		if (Thread.currentThread().getName().equals("***")) {
			for (i1 = 0; i1 < 100; i1++) {
				total_1++;
				System.out.println("total_1 " + total_1);
				if (total_1 == 50) {
					try {
						this.wait();   // スレッドを待ち状態にする
					}
					catch (InterruptedException e) {}
				}
			}
		}
		if (Thread.currentThread().getName().equals("---")) {
			for (i1 = 0; i1 < 100; i1++) {
				total_2++;
				System.out.println("total_2 " + total_2);
			}
			this.notify();   // 待ち状態のスレッドを元に戻す
		}
	}
}
		
(出力)
*** が実行中
total_1 1
total_1 2
total_1 3
total_1 4
total_1 5
total_1 6
total_1 7
total_1 8
total_1 9
total_1 10
total_1 11
total_1 12
total_1 13
total_1 14
total_1 15
total_1 16
total_1 17
total_1 18
total_1 19
total_1 20
total_1 21
total_1 22
total_1 23
total_1 24
total_1 25
total_1 26
total_1 27
total_1 28
total_1 29
total_1 30
total_1 31
total_1 32
total_1 33
total_1 34
total_1 35
total_1 36
k 1 1.0
total_1 37
k 2 1.4142135623730951
total_1 38
k 3 1.7320508075688772
total_1 39
k 4 2.0
total_1 40
k 5 2.23606797749979
total_1 41
k 6 2.449489742783178
total_1 42
k 7 2.6457513110645907
total_1 43
k 8 2.8284271247461903
total_1 44
k 9 3.0
total_1 45
k 10 3.1622776601683795
total_1 46
k 11 3.3166247903554
total_1 47
k 12 3.4641016151377544
total_1 48
k 13 3.605551275463989
total_1 49
k 14 3.7416573867739413
total_1 50
k 15 3.872983346207417
k 16 4.0
k 17 4.123105625617661
k 18 4.242640687119285
k 19 4.358898943540674
k 20 4.47213595499958
--- が実行中
k 21 4.58257569495584
total_2 1
k 22 4.69041575982343
total_2 2
k 23 4.795831523312719
total_2 3
k 24 4.898979485566356
total_2 4
k 25 5.0
total_2 5
k 26 5.0990195135927845
total_2 6
k 27 5.196152422706632
total_2 7
k 28 5.291502622129181
total_2 8
k 29 5.385164807134504
total_2 9
k 30 5.477225575051661
total_2 10
k 31 5.5677643628300215
total_2 11
k 32 5.656854249492381
total_2 12
k 33 5.744562646538029
total_2 13
k 34 5.830951894845301
total_2 14
k 35 5.916079783099616
total_2 15
k 36 6.0
total_2 16
k 37 6.082762530298219
total_2 17
k 38 6.164414002968976
total_2 18
k 39 6.244997998398398
total_2 19
k 40 6.324555320336759
total_2 20
k 41 6.4031242374328485
total_2 21
k 42 6.48074069840786
total_2 22
k 43 6.557438524302
total_2 23
k 44 6.6332495807108
total_2 24
k 45 6.708203932499369
total_2 25
k 46 6.782329983125268
total_2 26
k 47 6.855654600401044
total_2 27
k 48 6.928203230275509
total_2 28
k 49 7.0
total_2 29
k 50 7.0710678118654755
total_2 30
k 51 7.14142842854285
total_2 31
k 52 7.211102550927978
total_2 32
k 53 7.280109889280518
total_2 33
k 54 7.3484692283495345
total_2 34
k 55 7.416198487095663
total_2 35
total_2 36
k 56 7.483314773547883
total_2 37
k 57 7.54983443527075
total_2 38
k 58 7.615773105863909
k 59 7.681145747868608
total_2 39
k 60 7.745966692414834
k 61 7.810249675906654
k 62 7.874007874011811
k 63 7.937253933193772
k 64 8.0
k 65 8.06225774829855
total_2 40
k 66 8.12403840463596
total_2 41
k 67 8.18535277187245
total_2 42
k 68 8.246211251235321
total_2 43
k 69 8.306623862918075
total_2 44
k 70 8.366600265340756
total_2 45
k 71 8.426149773176359
total_2 46
k 72 8.48528137423857
total_2 47
k 73 8.54400374531753
total_2 48
k 74 8.602325267042627
total_2 49
k 75 8.660254037844387
total_2 50
k 76 8.717797887081348
total_2 51
k 77 8.774964387392123
total_2 52
k 78 8.831760866327848
total_2 53
k 79 8.888194417315589
total_2 54
k 80 8.94427190999916
total_2 55
k 81 9.0
total_2 56
k 82 9.055385138137417
total_2 57
k 83 9.1104335791443
total_2 58
k 84 9.16515138991168
total_2 59
k 85 9.219544457292887
total_2 60
k 86 9.273618495495704
total_2 61
k 87 9.327379053088816
total_2 62
k 88 9.38083151964686
total_2 63
k 89 9.433981132056603
total_2 64
k 90 9.486832980505138
total_2 65
k 91 9.539392014169456
total_2 66
k 92 9.591663046625438
total_2 67
k 93 9.643650760992955
total_2 68
k 94 9.695359714832659
total_2 69
k 95 9.746794344808963
total_2 70
k 96 9.797958971132712
total_2 71
k 97 9.848857801796104
total_2 72
k 98 9.899494936611665
total_2 73
k 99 9.9498743710662
total_2 74
k 100 10.0
total_2 75
k 101 10.04987562112089
total_2 76
k 102 10.099504938362077
total_2 77
k 103 10.14889156509222
total_2 78
k 104 10.198039027185569
total_2 79
k 105 10.246950765959598
total_2 80
k 106 10.295630140987
total_2 81
k 107 10.344080432788601
total_2 82
k 108 10.392304845413264
total_2 83
k 109 10.44030650891055
total_2 84
k 110 10.488088481701515
total_2 85
k 111 10.535653752852738
total_2 86
k 112 10.583005244258363
total_2 87
k 113 10.63014581273465
total_2 88
k 114 10.677078252031311
total_2 89
k 115 10.723805294763608
total_2 90
k 116 10.770329614269007
total_2 91
k 117 10.816653826391969
total_2 92
k 118 10.862780491200215
total_2 93
k 119 10.908712114635714
total_2 94
k 120 10.954451150103322
total_2 95
k 121 11.0
total_2 96
k 122 11.045361017187261
total_2 97
k 123 11.090536506409418
total_2 98
k 124 11.135528725660043
total_2 99
k 125 11.180339887498949
total_2 100
k 126 11.224972160321824
total_1 51
k 127 11.269427669584644
total_1 52
k 128 11.313708498984761
total_1 53
k 129 11.357816691600547
total_1 54
k 130 11.40175425099138
total_1 55
k 131 11.445523142259598
total_1 56
k 132 11.489125293076057
total_1 57
k 133 11.532562594670797
total_1 58
k 134 11.575836902790225
total_1 59
k 135 11.61895003862225
total_1 60
k 136 11.661903789690601
total_1 61
k 137 11.704699910719626
total_1 62
k 138 11.74734012447073
total_1 63
k 139 11.789826122551595
total_1 64
total_1 65
total_1 66
total_1 67
total_1 68
total_1 69
total_1 70
total_1 71
total_1 72
total_1 73
total_1 74
k 140 11.832159566199232
total_1 75
k 141 11.874342087037917
total_1 76
total_1 77
total_1 78
total_1 79
k 142 11.916375287812984
total_1 80
total_1 81
total_1 82
total_1 83
total_1 84
k 143 11.958260743101398
total_1 85
k 144 12.0
total_1 86
k 145 12.041594578792296
total_1 87
k 146 12.083045973594572
total_1 88
k 147 12.12435565298214
total_1 89
k 148 12.165525060596439
total_1 90
k 149 12.206555615733702
total_1 91
k 150 12.24744871391589
total_1 92
k 151 12.288205727444508
total_1 93
k 152 12.328828005937952
total_1 94
k 153 12.36931687685298
total_1 95
k 154 12.409673645990857
total_1 96
k 155 12.449899597988733
total_1 97
k 156 12.489995996796797
total_1 98
k 157 12.529964086141668
total_1 99
k 158 12.569805089976535
total_1 100
k 159 12.609520212918492
   終了しました(total_1 100 total_2 100)