• join()方法


    1、现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

     1 package com.mianshi.easy;
     2 class JoinDemo implements Runnable{
     3     public void run() {
     4         for(int i=0;i<100;i++){
     5             System.out.println(Thread.currentThread().getName()+"……"+ i);
     6         }
     7     }
     8 }
     9 
    10 public class JoinMethod {
    11 
    12     public static void main(String[] args) throws InterruptedException {
    13         JoinDemo jd = new JoinDemo();
    14         Thread T1 = new Thread(jd);
    15         Thread T2 = new Thread(jd);
    16         Thread T3 = new Thread(jd);
    17 
    18         T1.start();        
    19         //当t1拿着执行权把这些数据都打印完了,主线程才恢复到运行中来
    20         T1.join();        
    21 
    22         T2.start();
    23         T2.join();
    24 
    25         T3.start();
    26         T3.join();
    27 
    28     }
    29 }
    View Code

    结果:

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

    2、练习demo

    (1)主线程向下转时,碰到了t1.join(),t1要申请加入到运行中来,就是要CPU执行权。这时CPU执行权在主线程手里,主线程就把CPU执行权给放开,陷入冻结状态。活着的只有t1了,只有当t1拿着执行权把这些数据都打印完了,主线程才恢复到运行中来。

     1 package com.mianshi.easy;
     2 
     3 class JoinDemo implements Runnable{
     4 
     5     public void run() {
     6         for(int i=0;i<100;i++){
     7             System.out.println(Thread.currentThread().getName()+"……"+ i);
     8         }
     9     }
    10 }
    11 
    12 /**
    13  * 主线程向下转时,碰到了t1.join(),t1要申请加入到运行中来,就是要CPU执行权。
    14  * 这时候CPU执行权在主线程手里,主线程就把CPU执行权给放开,陷入冻结状态。活着的
    15  * 只有t1了,只有当t1拿着执行权把这些数据都打印完了,主线程才恢复到运行中来。
    16  * */
    17 public class JoinMethod {
    18 
    19     public static void main(String[] args) throws InterruptedException {
    20         JoinDemo jd = new JoinDemo();
    21         Thread t1 = new Thread(jd);
    22         Thread t2 = new Thread(jd);
    23 
    24         t1.start();
    25 
    26         t1.join();        
    27 
    28         t2.start();
    29         
    30         for(int j =0; j<100; j++){
    31             System.out.println(Thread.currentThread().getName()+"……"+j);
    32         }
    33     }
    34 }
    View Code

    结果:

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

    (2)改变顺序,主线程启动了两个子线程A、B时,其中一个子线程A调用了join()方法后,主线程将释放执行权,进入冻结状态。子线程A并不会影响子线程B,两个子线程将会交替执行,直到A线程run()方法执行完,主线程将会重新获得执行权。

     1 package com.mianshi.easy;
     2 
     3 class JoinDemo implements Runnable{
     4 
     5     public void run() {
     6         for(int i=0;i<200;i++){
     7             System.out.println(Thread.currentThread().getName()+"……"+ i);
     8         }
     9     }
    10 }
    11 
    12 /**
    13  * 将t1.join()和t2.start()位置互换。主线程开启了t1、t2,这时候CPU执行权还在主线程手里。
    14  * 当主线程碰到了t1.join(),释放执行权,处于冻结状态。活着的t1、t2都具备执行资格,这时候CPU
    15  * 便对t1和t2交替执行。主线程要等到t1结束才能活,至于t2结不结束,与主线程没有丝毫关系。如果t1
    16  * 结束了,t2还没结束,主线程就会和t2抢执行权执行。主线程碰到谁的join,它就等谁。也就是说,谁
    17  * 让它把执行权放出来,它就等谁死。至于谁去抢,它不管。
    18  * 
    19  * */
    20 public class JoinMethod {
    21 
    22     public static void main(String[] args) throws InterruptedException {
    23         JoinDemo jd = new JoinDemo();
    24         Thread t1 = new Thread(jd);
    25         Thread t2 = new Thread(jd);
    26 
    27         t1.start();
    28 
    29         t2.start();
    30         
    31         t1.join();        
    32 
    33         for(int j =0; j<100; j++){
    34             System.out.println(Thread.currentThread().getName()+"……"+j);
    35         }
    36     }
    37 }
    View Code

    结果:

    Thread-1……0
    Thread-0……0
    Thread-0……1
    Thread-1……1
    Thread-0……2
    Thread-1……2
    Thread-0……3
    Thread-1……3
    Thread-0……4
    Thread-0……5
    Thread-0……6
    Thread-0……7
    Thread-0……8
    Thread-0……9
    Thread-1……4
    Thread-1……5
    Thread-1……6
    Thread-1……7
    Thread-1……8
    Thread-1……9
    Thread-1……10
    Thread-1……11
    Thread-1……12
    Thread-0……10
    Thread-1……13
    Thread-1……14
    Thread-1……15
    Thread-1……16
    Thread-1……17
    Thread-1……18
    Thread-1……19
    Thread-1……20
    Thread-1……21
    Thread-1……22
    Thread-1……23
    Thread-1……24
    Thread-1……25
    Thread-1……26
    Thread-0……11
    Thread-0……12
    Thread-0……13
    Thread-0……14
    Thread-0……15
    Thread-0……16
    Thread-0……17
    Thread-1……27
    Thread-0……18
    Thread-1……28
    Thread-0……19
    Thread-1……29
    Thread-0……20
    Thread-1……30
    Thread-0……21
    Thread-1……31
    Thread-1……32
    Thread-1……33
    Thread-1……34
    Thread-1……35
    Thread-1……36
    Thread-1……37
    Thread-1……38
    Thread-1……39
    Thread-1……40
    Thread-1……41
    Thread-1……42
    Thread-1……43
    Thread-1……44
    Thread-1……45
    Thread-1……46
    Thread-1……47
    Thread-0……22
    Thread-1……48
    Thread-0……23
    Thread-1……49
    Thread-0……24
    Thread-1……50
    Thread-0……25
    Thread-1……51
    Thread-0……26
    Thread-1……52
    Thread-0……27
    Thread-1……53
    Thread-0……28
    Thread-1……54
    Thread-0……29
    Thread-1……55
    Thread-0……30
    Thread-1……56
    Thread-0……31
    Thread-1……57
    Thread-1……58
    Thread-1……59
    Thread-1……60
    Thread-1……61
    Thread-1……62
    Thread-1……63
    Thread-1……64
    Thread-1……65
    Thread-1……66
    Thread-1……67
    Thread-1……68
    Thread-1……69
    Thread-1……70
    Thread-1……71
    Thread-0……32
    Thread-1……72
    Thread-0……33
    Thread-1……73
    Thread-0……34
    Thread-1……74
    Thread-0……35
    Thread-1……75
    Thread-0……36
    Thread-1……76
    Thread-0……37
    Thread-1……77
    Thread-0……38
    Thread-0……39
    Thread-0……40
    Thread-0……41
    Thread-0……42
    Thread-0……43
    Thread-1……78
    Thread-0……44
    Thread-1……79
    Thread-0……45
    Thread-1……80
    Thread-0……46
    Thread-1……81
    Thread-0……47
    Thread-1……82
    Thread-0……48
    Thread-1……83
    Thread-0……49
    Thread-1……84
    Thread-0……50
    Thread-1……85
    Thread-0……51
    Thread-1……86
    Thread-0……52
    Thread-1……87
    Thread-0……53
    Thread-1……88
    Thread-0……54
    Thread-1……89
    Thread-0……55
    Thread-1……90
    Thread-0……56
    Thread-1……91
    Thread-0……57
    Thread-1……92
    Thread-0……58
    Thread-1……93
    Thread-0……59
    Thread-1……94
    Thread-0……60
    Thread-1……95
    Thread-0……61
    Thread-1……96
    Thread-0……62
    Thread-1……97
    Thread-0……63
    Thread-1……98
    Thread-0……64
    Thread-1……99
    Thread-0……65
    Thread-1……100
    Thread-0……66
    Thread-1……101
    Thread-0……67
    Thread-1……102
    Thread-0……68
    Thread-1……103
    Thread-0……69
    Thread-1……104
    Thread-0……70
    Thread-1……105
    Thread-0……71
    Thread-1……106
    Thread-0……72
    Thread-1……107
    Thread-0……73
    Thread-1……108
    Thread-1……109
    Thread-0……74
    Thread-1……110
    Thread-0……75
    Thread-1……111
    Thread-0……76
    Thread-1……112
    Thread-0……77
    Thread-1……113
    Thread-1……114
    Thread-0……78
    Thread-1……115
    Thread-0……79
    Thread-1……116
    Thread-0……80
    Thread-1……117
    Thread-0……81
    Thread-1……118
    Thread-0……82
    Thread-1……119
    Thread-0……83
    Thread-1……120
    Thread-0……84
    Thread-1……121
    Thread-0……85
    Thread-1……122
    Thread-0……86
    Thread-1……123
    Thread-0……87
    Thread-1……124
    Thread-0……88
    Thread-1……125
    Thread-0……89
    Thread-1……126
    Thread-0……90
    Thread-1……127
    Thread-0……91
    Thread-1……128
    Thread-0……92
    Thread-1……129
    Thread-0……93
    Thread-1……130
    Thread-0……94
    Thread-1……131
    Thread-0……95
    Thread-1……132
    Thread-0……96
    Thread-1……133
    Thread-0……97
    Thread-1……134
    Thread-0……98
    Thread-1……135
    Thread-0……99
    Thread-1……136
    Thread-0……100
    Thread-1……137
    Thread-0……101
    Thread-1……138
    Thread-0……102
    Thread-1……139
    Thread-0……103
    Thread-1……140
    Thread-0……104
    Thread-1……141
    Thread-0……105
    Thread-1……142
    Thread-0……106
    Thread-1……143
    Thread-0……107
    Thread-1……144
    Thread-0……108
    Thread-1……145
    Thread-1……146
    Thread-1……147
    Thread-0……109
    Thread-1……148
    Thread-0……110
    Thread-1……149
    Thread-0……111
    Thread-1……150
    Thread-0……112
    Thread-1……151
    Thread-0……113
    Thread-1……152
    Thread-0……114
    Thread-1……153
    Thread-0……115
    Thread-1……154
    Thread-0……116
    Thread-1……155
    Thread-0……117
    Thread-1……156
    Thread-0……118
    Thread-1……157
    Thread-0……119
    Thread-1……158
    Thread-0……120
    Thread-1……159
    Thread-0……121
    Thread-0……122
    Thread-1……160
    Thread-0……123
    Thread-1……161
    Thread-0……124
    Thread-1……162
    Thread-0……125
    Thread-0……126
    Thread-0……127
    Thread-0……128
    Thread-0……129
    Thread-0……130
    Thread-0……131
    Thread-0……132
    Thread-0……133
    Thread-0……134
    Thread-0……135
    Thread-0……136
    Thread-0……137
    Thread-0……138
    Thread-0……139
    Thread-0……140
    Thread-0……141
    Thread-0……142
    Thread-0……143
    Thread-0……144
    Thread-0……145
    Thread-0……146
    Thread-0……147
    Thread-0……148
    Thread-0……149
    Thread-0……150
    Thread-0……151
    Thread-0……152
    Thread-0……153
    Thread-0……154
    Thread-0……155
    Thread-0……156
    Thread-0……157
    Thread-0……158
    Thread-0……159
    Thread-0……160
    Thread-0……161
    Thread-0……162
    Thread-0……163
    Thread-0……164
    Thread-0……165
    Thread-0……166
    Thread-0……167
    Thread-0……168
    Thread-0……169
    Thread-0……170
    Thread-0……171
    Thread-0……172
    Thread-0……173
    Thread-0……174
    Thread-0……175
    Thread-0……176
    Thread-0……177
    Thread-0……178
    Thread-0……179
    Thread-0……180
    Thread-0……181
    Thread-0……182
    Thread-0……183
    Thread-0……184
    Thread-0……185
    Thread-0……186
    Thread-0……187
    Thread-0……188
    Thread-0……189
    Thread-0……190
    Thread-0……191
    Thread-0……192
    Thread-0……193
    Thread-0……194
    Thread-0……195
    Thread-0……196
    Thread-0……197
    Thread-0……198
    Thread-0……199
    Thread-1……163
    Thread-1……164
    main……0
    main……1
    main……2
    main……3
    main……4
    main……5
    main……6
    main……7
    main……8
    main……9
    main……10
    main……11
    main……12
    main……13
    main……14
    main……15
    main……16
    main……17
    main……18
    main……19
    main……20
    main……21
    main……22
    main……23
    main……24
    main……25
    main……26
    main……27
    main……28
    main……29
    main……30
    main……31
    main……32
    main……33
    main……34
    main……35
    main……36
    main……37
    main……38
    main……39
    main……40
    main……41
    main……42
    main……43
    main……44
    main……45
    main……46
    main……47
    main……48
    main……49
    main……50
    main……51
    main……52
    main……53
    main……54
    main……55
    main……56
    main……57
    main……58
    main……59
    Thread-1……165
    main……60
    Thread-1……166
    main……61
    Thread-1……167
    main……62
    main……63
    main……64
    main……65
    main……66
    main……67
    main……68
    main……69
    main……70
    main……71
    main……72
    main……73
    main……74
    main……75
    main……76
    Thread-1……168
    main……77
    Thread-1……169
    main……78
    Thread-1……170
    main……79
    Thread-1……171
    main……80
    Thread-1……172
    main……81
    Thread-1……173
    main……82
    Thread-1……174
    main……83
    Thread-1……175
    main……84
    Thread-1……176
    main……85
    Thread-1……177
    main……86
    Thread-1……178
    main……87
    Thread-1……179
    main……88
    Thread-1……180
    main……89
    Thread-1……181
    main……90
    Thread-1……182
    main……91
    Thread-1……183
    main……92
    Thread-1……184
    main……93
    Thread-1……185
    main……94
    Thread-1……186
    main……95
    Thread-1……187
    main……96
    Thread-1……188
    main……97
    Thread-1……189
    main……98
    Thread-1……190
    main……99
    Thread-1……191
    Thread-1……192
    Thread-1……193
    Thread-1……194
    Thread-1……195
    Thread-1……196
    Thread-1……197
    Thread-1……198
    Thread-1……199
    View Code

    顺便贴下java.lang.Thread中关于join()方法的实现代码:

      1     /**
      2      * Waits at most {@code millis} milliseconds for this thread to
      3      * die. A timeout of {@code 0} means to wait forever.
      4      *
      5      * <p> This implementation uses a loop of {@code this.wait} calls
      6      * conditioned on {@code this.isAlive}. As a thread terminates the
      7      * {@code this.notifyAll} method is invoked. It is recommended that
      8      * applications not use {@code wait}, {@code notify}, or
      9      * {@code notifyAll} on {@code Thread} instances.
     10      *
     11      * @param  millis
     12      *         the time to wait in milliseconds
     13      *
     14      * @throws  IllegalArgumentException
     15      *          if the value of {@code millis} is negative
     16      *
     17      * @throws  InterruptedException
     18      *          if any thread has interrupted the current thread. The
     19      *          <i>interrupted status</i> of the current thread is
     20      *          cleared when this exception is thrown.
     21      */
     22     public final synchronized void join(long millis)
     23     throws InterruptedException {
     24         long base = System.currentTimeMillis();
     25         long now = 0;
     26 
     27         if (millis < 0) {
     28             throw new IllegalArgumentException("timeout value is negative");
     29         }
     30 
     31         if (millis == 0) {
     32             while (isAlive()) {
     33                 wait(0);
     34             }
     35         } else {
     36             while (isAlive()) {
     37                 long delay = millis - now;
     38                 if (delay <= 0) {
     39                     break;
     40                 }
     41                 wait(delay);
     42                 now = System.currentTimeMillis() - base;
     43             }
     44         }
     45     }
     46 
     47     /**
     48      * Waits at most {@code millis} milliseconds plus
     49      * {@code nanos} nanoseconds for this thread to die.
     50      *
     51      * <p> This implementation uses a loop of {@code this.wait} calls
     52      * conditioned on {@code this.isAlive}. As a thread terminates the
     53      * {@code this.notifyAll} method is invoked. It is recommended that
     54      * applications not use {@code wait}, {@code notify}, or
     55      * {@code notifyAll} on {@code Thread} instances.
     56      *
     57      * @param  millis
     58      *         the time to wait in milliseconds
     59      *
     60      * @param  nanos
     61      *         {@code 0-999999} additional nanoseconds to wait
     62      *
     63      * @throws  IllegalArgumentException
     64      *          if the value of {@code millis} is negative, or the value
     65      *          of {@code nanos} is not in the range {@code 0-999999}
     66      *
     67      * @throws  InterruptedException
     68      *          if any thread has interrupted the current thread. The
     69      *          <i>interrupted status</i> of the current thread is
     70      *          cleared when this exception is thrown.
     71      */
     72     public final synchronized void join(long millis, int nanos)
     73     throws InterruptedException {
     74 
     75         if (millis < 0) {
     76             throw new IllegalArgumentException("timeout value is negative");
     77         }
     78 
     79         if (nanos < 0 || nanos > 999999) {
     80             throw new IllegalArgumentException(
     81                                 "nanosecond timeout value out of range");
     82         }
     83 
     84         if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
     85             millis++;
     86         }
     87 
     88         join(millis);
     89     }
     90 
     91     /**
     92      * Waits for this thread to die.
     93      *
     94      * <p> An invocation of this method behaves in exactly the same
     95      * way as the invocation
     96      *
     97      * <blockquote>
     98      * {@linkplain #join(long) join}{@code (0)}
     99      * </blockquote>
    100      *
    101      * @throws  InterruptedException
    102      *          if any thread has interrupted the current thread. The
    103      *          <i>interrupted status</i> of the current thread is
    104      *          cleared when this exception is thrown.
    105      */
    106     public final void join() throws InterruptedException {
    107         join(0);
    108     }
    View Code

     

      

  • 相关阅读:
    【lwip】04内存管理
    微信小程序之获取当前位置经纬度以及地图显示
    Apache与Tomcat的区别和联系
    Jfinal中Db类的的使用
    利用GROUP_CONCAT和GROUP BY实现字段拼接
    实现easyui combobox中textField字段的拼接
    Jfinal数据库操作语句中占位符的使用
    Django项目部署到Apache服务器
    函数编程概念
    腾讯官网 样式初始化
  • 原文地址:https://www.cnblogs.com/gongxing/p/4651624.html
Copyright © 2020-2023  润新知