多執行緒(七) join方法的使用

2022-05-07 06:42:07 字數 2748 閱讀 2711

作用: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...