作用:join()方法的作用是等待執行緒物件銷毀。
join()方法具有能使執行緒排隊執行的作用,有點類似於同步的效果。
join與synchronize的區別:
join在內部使用wait()方法進行等待,底層用wait()來實現。
synchronize關鍵字是以「物件監視器」為原理做同步操作。
join()除了無參方法之外,還過載了join(毫秒)的方法,此方法與sleep(毫秒)的區別是:
join()操作底層用wait()來實現,可以釋放鎖。
sleep()不會釋放鎖。
join()釋放鎖的demo:
執行緒類a:
package
com.
wang
.myjoin
;
public
class
threada
extends
thread
@override
public
void
run()
catch
(interruptedexceptione1)
for
(inti =
0;i<
10000;i
++)
}
}
}
執行緒類b:
package
com.
wang
.myjoin
;
public
class
threadb
extends
thread
catch
(interruptedexceptione)
system
.out
.println
("b thread is over."
);
}
public
synchronized
void
myservice
()
}
}
執行緒類c:
package
com.
wang
.myjoin
;
public
class
threadc
extends
thread
@override
public
void
run()
}
測試類:
package
com.
wang
.myjoin
;
public
class
jointest
}
輸出結果:
b thread is run
.
~~~我來測試一下~~~~
myservice
dosth
.0
myservice
dosth
.1
myservice
dosth
.2
.
.
.
myservice
dosth
.99
b thread is over
.
b
dosth
....
b
dosth
....
.
.
.
可見執行緒在join()之後是釋放鎖的,其他執行緒可以訪問同鎖的synchronize方法。
需要注意的問題:join()後的方法有可能會提前執行:(這個沒試出來)
我們同時執行以下三個操作:
①.thread1.start();
②.thread2.start();
③.sysout
哪個先執行是不確定的,不過①和②的操作是相同的鎖,所以是互斥的。
來自為知筆記(wiz)
多執行緒Join方法
天意憐幽草,人間重晩晴 a.sleep 5000 讓執行緒睡5秒但是,如果你不知道執行緒b需要執行多長時間,並且在a中需要使用到b中的結果,那麼,這時你就可以使用join方法 下面是具體的例子 可以看到,join long time 方法內部其實是呼叫了wait long time 方法,我們了解到...
多執行緒join 方法
直接 public static void main string args for thread t list int n 0 for thread t list catch interruptedexception e system.out.println 完全結束 static class m...
Java多執行緒 方法join的使用
主線程啟動子執行緒,如果子執行緒中要進行大量的耗時運算,主線程會早於子執行緒結束,這時候主線程如果想等待子執行緒完成之後再執行,就需要join 方法 package top.yuyufeng.demo.thread author yuyufeng date 2019 2 22.public clas...