join()方法

1、现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
package com.mianshi.easy;
class JoinDemo implements Runnable{
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"……"+ i);
}
}
} public class JoinMethod { public static void main(String[] args) throws InterruptedException {
JoinDemo jd = new JoinDemo();
Thread T1 = new Thread(jd);
Thread T2 = new Thread(jd);
Thread T3 = new Thread(jd); T1.start();
//当t1拿着执行权把这些数据都打印完了,主线程才恢复到运行中来
T1.join(); T2.start();
T2.join(); T3.start();
T3.join(); }
}
结果:
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
2、练习demo
(1)主线程向下转时,碰到了t1.join(),t1要申请加入到运行中来,就是要CPU执行权。这时CPU执行权在主线程手里,主线程就把CPU执行权给放开,陷入冻结状态。活着的只有t1了,只有当t1拿着执行权把这些数据都打印完了,主线程才恢复到运行中来。
package com.mianshi.easy;
class JoinDemo implements Runnable{
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"……"+ i);
}
}
}
/**
* 主线程向下转时,碰到了t1.join(),t1要申请加入到运行中来,就是要CPU执行权。
* 这时候CPU执行权在主线程手里,主线程就把CPU执行权给放开,陷入冻结状态。活着的
* 只有t1了,只有当t1拿着执行权把这些数据都打印完了,主线程才恢复到运行中来。
* */
public class JoinMethod {
public static void main(String[] args) throws InterruptedException {
JoinDemo jd = new JoinDemo();
Thread t1 = new Thread(jd);
Thread t2 = new Thread(jd);
t1.start();
t1.join();
t2.start();
for(int j =0; j<100; j++){
System.out.println(Thread.currentThread().getName()+"……"+j);
}
}
}
结果:
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
(2)改变顺序,主线程启动了两个子线程A、B时,其中一个子线程A调用了join()方法后,主线程将释放执行权,进入冻结状态。子线程A并不会影响子线程B,两个子线程将会交替执行,直到A线程run()方法执行完,主线程将会重新获得执行权。
package com.mianshi.easy;
class JoinDemo implements Runnable{
public void run() {
for(int i=0;i<200;i++){
System.out.println(Thread.currentThread().getName()+"……"+ i);
}
}
}
/**
* 将t1.join()和t2.start()位置互换。主线程开启了t1、t2,这时候CPU执行权还在主线程手里。
* 当主线程碰到了t1.join(),释放执行权,处于冻结状态。活着的t1、t2都具备执行资格,这时候CPU
* 便对t1和t2交替执行。主线程要等到t1结束才能活,至于t2结不结束,与主线程没有丝毫关系。如果t1
* 结束了,t2还没结束,主线程就会和t2抢执行权执行。主线程碰到谁的join,它就等谁。也就是说,谁
* 让它把执行权放出来,它就等谁死。至于谁去抢,它不管。
*
* */
public class JoinMethod {
public static void main(String[] args) throws InterruptedException {
JoinDemo jd = new JoinDemo();
Thread t1 = new Thread(jd);
Thread t2 = new Thread(jd);
t1.start();
t2.start();
t1.join();
for(int j =0; j<100; j++){
System.out.println(Thread.currentThread().getName()+"……"+j);
}
}
}
结果:
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
顺便贴下java.lang.Thread中关于join()方法的实现代码:
/**
* Waits at most {@code millis} milliseconds for this thread to
* die. A timeout of {@code 0} means to wait forever.
*
* <p> This implementation uses a loop of {@code this.wait} calls
* conditioned on {@code this.isAlive}. As a thread terminates the
* {@code this.notifyAll} method is invoked. It is recommended that
* applications not use {@code wait}, {@code notify}, or
* {@code notifyAll} on {@code Thread} instances.
*
* @param millis
* the time to wait in milliseconds
*
* @throws IllegalArgumentException
* if the value of {@code millis} is negative
*
* @throws InterruptedException
* if any thread has interrupted the current thread. The
* <i>interrupted status</i> of the current thread is
* cleared when this exception is thrown.
*/
public final synchronized void join(long millis)
throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0; if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
} if (millis == 0) {
while (isAlive()) {
wait(0);
}
} else {
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
} /**
* Waits at most {@code millis} milliseconds plus
* {@code nanos} nanoseconds for this thread to die.
*
* <p> This implementation uses a loop of {@code this.wait} calls
* conditioned on {@code this.isAlive}. As a thread terminates the
* {@code this.notifyAll} method is invoked. It is recommended that
* applications not use {@code wait}, {@code notify}, or
* {@code notifyAll} on {@code Thread} instances.
*
* @param millis
* the time to wait in milliseconds
*
* @param nanos
* {@code 0-999999} additional nanoseconds to wait
*
* @throws IllegalArgumentException
* if the value of {@code millis} is negative, or the value
* of {@code nanos} is not in the range {@code 0-999999}
*
* @throws InterruptedException
* if any thread has interrupted the current thread. The
* <i>interrupted status</i> of the current thread is
* cleared when this exception is thrown.
*/
public final synchronized void join(long millis, int nanos)
throws InterruptedException { if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
} if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
} if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
millis++;
} join(millis);
} /**
* Waits for this thread to die.
*
* <p> An invocation of this method behaves in exactly the same
* way as the invocation
*
* <blockquote>
* {@linkplain #join(long) join}{@code (0)}
* </blockquote>
*
* @throws InterruptedException
* if any thread has interrupted the current thread. The
* <i>interrupted status</i> of the current thread is
* cleared when this exception is thrown.
*/
public final void join() throws InterruptedException {
join(0);
}
join()方法的更多相关文章
- java多线程中关于join方法的使用
Thread的非静态方法join()让一个线程B"加入"到另外一个线程A的尾部.在A执行完毕之前,B不能工作.例如: Thread t = new MyThread ...
- 【多线程】java多线程 测试例子 详解wait() sleep() notify() start() join()方法 等
java实现多线程,有两种方法: 1>实现多线程,继承Thread,资源不能共享 2>实现多线程 实现Runnable接口,可以实现资源共享 *wait()方法 在哪个线程中调用 则当前 ...
- JAVA join()方法
转自:http://www.open-open.com/lib/view/open1371741636171.html 一.为什么要用join()方法 在很多情况下,主线程生成并起动了子线程,如果子线 ...
- Thread.join()方法
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B.t.join() ...
- python thread的join方法解释
python的Thread类中提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行.这个方法还可以设定一个timeout参数,避免无休止的等待.因为两个线程顺序完成,看起来象一个 ...
- Java Thread.join()方法
一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二.为什么要用join() ...
- Java线程中yield与join方法的区别
长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...
- 简谈Java的join()方法
join()是Thread类的一个方法.根据jdk文档的定义: public final void join()throws InterruptedException: Waits for this ...
- java基础知识回顾之java Thread类学习(十一)--join方法的理解
以下面例子说明下面的源码:main 线程 和 A线程,A线程是main线程创建并且启动的,main线程优先级比较高,正在执行:这个时候main线程调用A.join()之后,main线程一直等待,直到A ...
随机推荐
- 如何解读SQL Server日志(2/3)
接下来说说返回的RowLogo Content列,例子中返回了三个列.这些列包含了数据操作的"有效工作负载(Playload)"记录.根据不同操作类型有效负载的内容也是不同的,但是 ...
- JQuery01
一:JQuery 1 JQuery知识 *:就是让我们学会调用JQ插件,其实内部就是对JS的封装. *:jquery里面有三个文件, 第2个和第3个其实里面的内容是一样的,只是第三个对其进行了压缩,使 ...
- 使用ASP.NET MVC局部视图避免JS拼接HTML,编写易于维护的HTML页面
以前使用ASP.NET WebForm开发时,喜欢使用Repeater控件嵌套的方式开发前台页面,这样就不用JS拼接HTML或者后台拼接HTML了,写出的HTML页面美观.简捷.易于维护,由于不用JS ...
- Web API应用架构在Winform混合框架中的应用(4)--利用代码生成工具快速开发整套应用
前面几篇介绍了Web API的基础信息,以及如何基于混合框架的方式在WInform界面里面整合了Web API的接入方式,虽然我们看似调用过程比较复杂,但是基于整个框架的支持和考虑,我们提供了代码生成 ...
- iOS学习笔记——iOS高级控件
UITableView UITableView的样式有两种,一种是Grouped(左图),另一种是Plain(右图),如下图,它的属性是style,类型为UITableViewStyle,枚举值分别是 ...
- html5学习笔记6-- canvas
绘制普通直线,先看效果图: 实现代码如下: <!DOCTYPE html> <html> <head lang="en"> <meta c ...
- 孙鑫MFC学习笔记:15多线程
15 1.进程地址空间 2.线程 3.CreateThread创建一个线程 4.CloseHandle关闭线程句柄,要在不再使用线程句柄的时候关闭,递减线程引用计数 5.编辑框默认不支持多行,需要打开 ...
- Get a List of Keys From a Dictionary in Both Python 2 and Python 3
http://askubuntu.com/questions/656610/trying-to-install-mysql-connector-for-python-3?rq=1 trying to ...
- Fiddler 教程
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有 ...
- GJM : 基于Actor模式的c#网络游戏服务器的实现和Unity游戏客户端的连接 [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...