欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

多個線程順序執行的幾種方法

錢浩然2年前19瀏覽0評論

多個線程順序執行的幾種方法?

這個要分段來實現, 第一步是讓線程同步,第二部是讓線程有順序。

同步:我們可以用synchronized來解決。

java線程同步原理: java會為每個object對象分配一個monitor,當某個對象的同步方法(synchronized methods )被多個線程調用時,該對象的monitor將負責處理這些訪問的并發獨占要求。

當一個線程調用一個對象的同步方法時,JVM會檢查該對象的monitor。如果monitor沒有被占用,那么這個線程就得到了monitor的占有權,可以繼續執行該對象的同步方法;如果monitor被其他線程所占用,那么該線程將被掛起,直到monitor被釋放。

當線程退出同步方法調用時,該線程會釋放monitor,這將允許其他等待的線程獲得monitor以使對同步方法的調用執行下去。就像下面這樣:

public void test() {

synchronized (this) {

//做一些事

//這里只會有一個線程來調用該方法,因為只有一個this對象作為資源分配給該線程

}

}

順序:我們可以用List來解決,因為它是有序的。我們只需要將要執行的線程放入到List中

上代碼:

/**

* 讓多個線程同步順序執行的線程管理器

* @author bianrx

* @date 2012.1.18

* SynchronizedRunMultiThread

*/

public class SyncManager {

/**

* 待執行的線程集合,注意這里必須是Runnable接口類型,下面會解釋

*/

private List<Runnable> runnableList;

public SyncManager(){}

public SyncManager(List<Runnable> runnableList) {

this.runnableList

= runnableList;

}

public void setRunnable(List<Runnable> runnableList) {

this.runnableList

= runnableList;

}

public void run() {

//遍歷代執行的線程集合

for(Runnable runnable: runnableList) {

runThread(runnable);

}

}

/**

* 按順序同步執行多個線程

* @author bianrx

* @date 2012.1.18

* @param runnable

*/

private void runThread(Runnable runnable) {

synchronized (this) {

runnable.run();//這里需要注意的是:必須調用run方法,因為如果你調用了start方法,線程只會向JVM請求資源,但是未必就執行其中的run。

//這個方法是同步的,所以當前只有一個線程占用了this對象。

}

}

}

java 順序執行,多個線程順序執行的幾種方法