原創|其它|編輯:郝浩|2009-09-25 10:56:26.000|閱讀 395 次
概述:多線程運行時有待處理線程?試試看下面介紹的這個批量線程同步方法吧。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
多線程運行時有待處理線程?試試看下面介紹的這個批量線程同步方法吧。
在一批線程處理程序中,有時必須等到所有線程全部運行完后,才能進行下一步任務處理, 可以采用如下方法解決,創建一個鎖對象 ,該鎖對象提供一個當前線程等待其他線程的方法。見代碼:
/**
*
* 此類主要用來處理線程的同步屏蔽模型,比如,一批線程運行,必須在最后一個線程運行
* 完后,才能進行下一步的操作,那么就可以創建一個鎖對象,鎖對象提供一個線程等待其他線程
* 的方法,如果當前線程運行時,還有未運行的線程,則此線程wait,否則,此線程喚醒其他阻塞的
* 線程,進而最終完成線程的運行
* */
public class LockObject {
private int totalThread = 0;
private int currentThread = 0;
public LockObject(int totalThread) {
this.totalThread = totalThread;
this.currentThread = 1;
}
public synchronized void waitForOtherThread() {
if (this.currentThread < this.totalThread) {
this.currentThread++;
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
this.currentThread = 1;
notifyAll();
}
}
public int getTotalThread() {
return totalThread;
}
public void setTotalThread(int totalThread) {
this.totalThread = totalThread;
}
public int getCurrentThread() {
return currentThread;
}
public void setCurrentThread(int currentThread) {
this.currentThread = currentThread;
}
}
批量線程同步機制介紹
此對象提供 二個私有變量,totalThread 的初始值為所運行的線程的總數,currentThread 為當前正在運行的線程數。
線程運行時處理完自己的任務后調用方法waitForOtherThread 等待其他線程結束,即當前運行線程數與線程總數的比較
如果運行線程數小于線程總數,則當前運行線程數+1 后,當前線程進入等待狀態,否則,喚醒其他等待線程。
見測試程序
public class MyThread extends Thread {
public static LockObject lo = new LockObject(1000);
public MyThread(String threadName) {
super(threadName);
}
public void run() {
System.out.println(Thread.currentThread().getName() + " ----開始運行");
lo.waitForOtherThread();
System.out.println(Thread.currentThread().getName() + " ----結束運行");
}
public static void main(String[] args) {
for (int i = 1; i <= 1000; i++) {
Thread thread = new MyThread("第" + i + "個線程");
thread.setPriority(NORM_PRIORITY);
thread.start();
}
}
}
以上就介紹了批量線程同步的實現。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:IT專家網