点击这里给我发消息 点击这里给我发消息

多线程的批量线程同步解决方案

添加时间:2013-12-7
    相关阅读: 解决方案 方案 程序

  多线程运行时有待处理线程?试试看下面介绍的这个批量线程同步方法吧。

  在一批线程处理程序中,有时必须等到所有线程全部运行完后,才能进行下一步任务处理, 可以采用如下方法解决,创建一个锁对象 ,该锁对象提供一个当前线程等待其他线程的方法。见代码:

  1./**

  2. *

  3. * 此类主要用来处理线程的同步屏蔽模型,比如,一批线程运行,必须在最后一个线程运行

  4. * 完后,才能进行下一步的操作,那么就可以创建一个锁对象,锁对象提供一个线程等待其他线程

  5. * 的方法,如果当前线程运行时,还有未运行的线程,则此线程wait,否则,此线程唤醒其他阻塞的

  6. * 线程,进而最终完成线程的运行

  7. * */

  8.public class LockObject {

  9.

  10. private int totalThread = 0;

  11. private int currentThread = 0;

  12.

  13. public LockObject(int totalThread) {

  14.  this.totalThread = totalThread;

  15.  this.currentThread = 1;

  16. }

  17.

  18. public synchronized void waitForOtherThread() {

  19.  if (this.currentThread < this.totalThread) {

  20.   this.currentThread++;

  21.   try {

  22.    this.wait();

  23.   } catch (InterruptedException e) {

  24.    // TODO Auto-generated catch block

  25.    e.printStackTrace();

  26.   }

  27.  } else {

  28.   this.currentThread = 1;

  29.   notifyAll();

  30.  }

  31. }

  32.

  33. public int getTotalThread() {

  34.  return totalThread;

  35. }

  36.

  37. public void setTotalThread(int totalThread) {

  38.  this.totalThread = totalThread;

  39. }

  40.

  41. public int getCurrentThread() {

  42.  return currentThread;

  43. }

  44.

  45. public void setCurrentThread(int currentThread) {

  46.  this.currentThread = currentThread;

  47. }

  48.}

  49.

  批量线程同步机制介绍

  此对象提供 二个私有变量,totalThread 的初始值为所运行的线程的总数,currentThread 为当前正在运行的线程数。

  线程运行时处理完自己的任务后调用方法waitForOtherThread 等待其他线程结束,即当前运行线程数与线程总数的比较

  如果运行线程数小于线程总数,则当前运行线程数+1 后,当前线程进入等待状态,否则,唤醒其他等待线程。

  见测试程序

  50.public class MyThread extends Thread {

  51. public static LockObject lo = new LockObject(1000);

  52.

  53. public MyThread(String threadName) {

  54.  super(threadName);

  55. }

  56.

  57. public void run() {

  58.   System.out.println(Thread.currentThread().getName() + " ----开始运行");

  59.   lo.waitForOtherThread();

  60.   System.out.println(Thread.currentThread().getName() + " ----结束运行");

  61. }

  62.

  63. public static void main(String[] args) {

  64.  for (int i = 1; i <= 1000; i++) {

  65.   Thread thread = new MyThread("第" + i + "个线程");

  66.   thread.setPriority(NORM_PRIORITY);

  67.   thread.start();

  68.  }

  69. }

  70.

  71.}

  以上就介绍了批量线程同步的实现。

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册