多线程运行时有待处理线程?试试看下面介绍的这个批量线程同步方法吧 在一批线程处理程序中有时必须等到所有线程全部运行完后才能进行下一步任务处理 可以采用如下方法解决创建一个锁对象 该锁对象提供一个当前线程等待其他线程的方法见代码 /** * * 此类主要用来处理线程的同步屏蔽模型比如一批线程运行必须在最后一个线程运行 * 完后才能进行下一步的操作那么就可以创建一个锁对象锁对象提供一个线程等待其他线程 * 的方法如果当前线程运行时还有未运行的线程则此线程wait否则此线程唤醒其他阻塞的 * 线程进而最终完成线程的运行 * */ public class LockObject {
private int totalThread = ; private int currentThread = ;
public LockObject(int totalThread) { thistotalThread = totalThread; thiscurrentThread = ; }
public synchronized void waitForOtherThread() { if (thiscurrentThread < thistotalThread) { thiscurrentThread++; try { thiswait(); } catch (InterruptedException e) { // TODO Autogenerated catch block eprintStackTrace(); } } else { thiscurrentThread = ; notifyAll(); } }
public int getTotalThread() { return totalThread; }
public void setTotalThread(int totalThread) { thistotalThread = totalThread; }
public int getCurrentThread() { return currentThread; }
public void setCurrentThread(int currentThread) { thiscurrentThread = currentThread; } }
批量线程同步机制介绍 此对象提供 二个私有变量totalThread 的初始值为所运行的线程的总数currentThread 为当前正在运行的线程数 线程运行时处理完自己的任务后调用方法waitForOtherThread 等待其他线程结束即当前运行线程数与线程总数的比较 如果运行线程数小于线程总数则当前运行线程数+ 后当前线程进入等待状态否则唤醒其他等待线程 见测试程序 public class MyThread extends Thread { public static LockObject lo = new LockObject();
public MyThread(String threadName) { super(threadName); }
public void run() { Systemoutprintln(ThreadcurrentThread()getName() + 开始运行); lowaitForOtherThread(); Systemoutprintln(ThreadcurrentThread()getName() + 结束运行); }
public static void main(String[] args) { for (int i = ; i <= ; i++) { Thread thread = new MyThread(第 + i + 个线程); threadsetPriority(NORM_PRIORITY); threadstart(); } }
} 以上就介绍了批量线程同步的实现 |