1.JAVA多線程(四)Java多線程之join等待結束
1.1 join(等待結束)
join()方法的作用,是等待這個線程結束;
也就是說,thread.join()方法阻塞調用此方法的線程(calling thread)進入 TIMED_WAITING 狀態,直到線程thread完成,此線程再繼續;
通常用於在main()主線程內,等待其它線程完成再結束main()主線程。
package com.yuanxw.chapter4;
public class ThreadJoin {
public static void main(String[] args) throws InterruptedException {
long startTime = System.currentTimeMillis();
Thread thread1 = new Thread(new SyncDatabase("T1","192.168.185.26",1000L));
Thread thread2 = new Thread(new SyncDatabase("T2","192.168.185.27",1500L));
Thread thread3 = new Thread(new SyncDatabase("T3","192.168.185.28",2500L));
thread1.start();
thread2.start();
thread3.start();
// 等待【thread1、thread2、thread3】對象線程死亡(結束)
thread1.join();
thread2.join();
thread3.join();
long endTime = System.currentTimeMillis();
System.out.println(String.format("所有服務器數據同步完成,共耗時【%s】毫秒",endTime - startTime ));
}
}
/**
* 同步數據庫數據
*/
class SyncDatabase implements Runnable{
/** 同步服務器名稱 **/
private String serviceName;
/** 同步服務IP地址 **/
private String ipAddr;
/** 同步時間 **/
private long syncTime;
public SyncDatabase(String serviceName, String ipAddr, long syncTime) {
this.serviceName = serviceName;
this.ipAddr = ipAddr;
this.syncTime = syncTime;
}
@Override
public void run() {
try {
Thread.sleep(syncTime);
System.out.println(String.format("同步【%s】服務器,IP地址【%s】,數據同步完成,共耗時【%s】毫秒", serviceName,ipAddr,syncTime));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
執行結果:
同步【T1】服務器,IP地址【192.168.185.26】,數據同步完成,共耗時【1000】毫秒
同步【T2】服務器,IP地址【192.168.185.27】,數據同步完成,共耗時【1500】毫秒
同步【T3】服務器,IP地址【192.168.185.28】,數據同步完成,共耗時【2500】毫秒
所有服務器數據同步完成,共耗時【2502】毫秒
– 以上爲《JAVA多線程(四)Java多線程之join等待結束》,如有不當之處請指出,我後續逐步完善更正,大家共同提高。謝謝大家對我的關注。
——厚積薄發(yuanxw)