66 * 线程等待JOIN测试
77 */
88public class ThreadJoinTest {
9+
910 public static void main (String [] args ) throws InterruptedException {
11+ testJoinNormal ();
12+ }
13+
14+ /**
15+ * join常规用法
16+ */
17+ private static void testJoinNormal () {
18+
19+ class ThreadB extends Thread {
20+ @ Override
21+ public void run () {
22+ for (;;) {
23+
24+ }
25+ }
26+ }
27+
28+ class ThreadA extends Thread {
29+
30+ public ThreadB threadB ;
31+
32+ public ThreadA (ThreadB threadB ) {
33+ this .threadB = threadB ;
34+ }
35+
36+ @ Override
37+ public void run () {
38+ threadB .start ();
39+ try {
40+ TimeUnit .SECONDS .sleep (1 );
41+ } catch (InterruptedException e ) {
42+ e .printStackTrace ();
43+ }
44+ System .out .println ("线程B在JOIN前的状态:" +threadB .getState ().name ());
45+ try {
46+ threadB .join (10000 );
47+ } catch (InterruptedException e ) {
48+ e .printStackTrace ();
49+ }
50+ System .out .println ("线程A在JOIN后的状态:" +getState ().name ());
51+ System .out .println ("线程B在JOIN后的状态:" +threadB .getState ().name ());
52+ }
53+ }
54+
1055 ThreadB threadB = new ThreadB ();
1156 ThreadA threadA = new ThreadA (threadB );
1257 threadA .start ();
1358 System .out .println ("线程A在JOIN前的状态:" +threadA .getState ().name ());
14- TimeUnit .SECONDS .sleep (3 );
59+ try {
60+ TimeUnit .SECONDS .sleep (3 );
61+ } catch (InterruptedException e ) {
62+ e .printStackTrace ();
63+ }
1564 System .out .println ("线程A在JOIN中的状态:" +threadA .getState ().name ());
1665 }
17- }
1866
19- class ThreadA extends Thread {
20-
21- public ThreadB threadB ;
22-
23- public ThreadA (ThreadB threadB ) {
24- this .threadB = threadB ;
25- }
26-
27- @ Override
28- public void run () {
29- threadB .start ();
30- try {
31- TimeUnit .SECONDS .sleep (1 );
32- } catch (InterruptedException e ) {
33- e .printStackTrace ();
34- }
35- System .out .println ("线程B在JOIN前的状态:" +threadB .getState ().name ());
36- try {
37- threadB .join (10000 );
38- } catch (InterruptedException e ) {
39- e .printStackTrace ();
40- }
41- System .out .println ("线程A在JOIN后的状态:" +getState ().name ());
42- System .out .println ("线程B在JOIN后的状态:" +threadB .getState ().name ());
43- }
4467}
4568
46- class ThreadB extends Thread {
47- @ Override
48- public void run () {
49- for (;;) {
50-
51- }
52- }
53- }
0 commit comments