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

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

我们一直强调网站设计制作、成都网站制作对于企业的重要性,如果您也觉得重要,那么就需要我们慎重对待,选择一个安全靠谱的网站建设公司,企业网站我们建议是要么不做,要么就做好,让网站能真正成为企业发展过程中的有力推手。专业网站设计公司不一定是大公司,成都创新互联作为专业的网络公司选择我们就是放心。

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

 
 
 
  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 后,当前线程进入等待状态,否则,唤醒其他等待线程。

见测试程序

 
 
 
  1. public class MyThread extends Thread {  
  2.  public static LockObject lo = new LockObject(1000);  
  3.  
  4.  public MyThread(String threadName) {  
  5.   super(threadName);  
  6.  }  
  7.  
  8.  public void run() {  
  9.    System.out.println(Thread.currentThread().getName() + " ----开始运行");  
  10.    lo.waitForOtherThread();  
  11.    System.out.println(Thread.currentThread().getName() + " ----结束运行");  
  12.  }  
  13.  
  14.  public static void main(String[] args) {  
  15.   for (int i = 1; i <= 1000; i++) {  
  16.    Thread thread = new MyThread("第" + i + "个线程");  
  17.    thread.setPriority(NORM_PRIORITY);  
  18.    thread.start();  
  19.   }  
  20.  }  
  21.  
  22. }  

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

【编辑推荐】

  1. C#线程同步详细分析
  2. 运用C#数据提供者
  3. C#允许运算符重载剖析
  4. Java和C#顶层声明概述
  5. C#完全限定名简单分析

网页名称:多线程的批量线程同步解决方案
链接地址:http://www.hantingmc.com/qtweb/news48/519548.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联