成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

多線程的批量線程同步解決方案

開發 后端
本文介紹多線程的批量線程同步解決方案。解決方法是,創建一個鎖對象,該鎖對象提供一個當前線程等待其他線程的方法。

多線程運行時有待處理線程?試試看下面介紹的這個批量線程同步方法吧。

在一批線程處理程序中,有時必須等到所有線程全部運行完后,才能進行下一步任務處理, 可以采用如下方法解決,創建一個鎖對象 ,該鎖對象提供一個當前線程等待其他線程的方法。見代碼:

  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#完全限定名簡單分析
責任編輯:yangsai 來源: JavaEye博客
相關推薦

2025-03-03 01:25:00

SpringAOP日志

2009-07-15 17:09:32

Swing線程

2012-05-18 11:17:58

Java多線程

2010-01-21 11:27:30

linux多線程機制線程同步

2025-01-07 08:20:00

2015-07-22 09:39:38

IOS多線程同步

2015-07-22 09:51:51

iOS開發線程

2013-07-16 12:13:27

iOS多線程多線程概念GCD

2009-03-18 09:26:23

Winform多線程C#

2011-06-22 13:57:54

Java多線程

2021-05-17 07:51:44

SimpleDateF線程安全

2011-06-22 13:47:16

Java多線程

2010-01-21 11:22:35

Linux多線程同步

2010-03-15 19:37:00

Java多線程同步

2011-04-14 13:27:53

Synchronize多線程

2010-01-21 11:23:49

Linux多線程同步消息隊列

2009-03-24 08:56:23

數據同步多線程Java

2015-09-10 09:30:54

Java多線程同步

2009-07-01 17:34:03

Servlet和JSP

2022-04-07 07:40:40

線程安全變量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产色播av在线 | 色婷婷av一区二区三区软件 | 国产视频一区二区 | 国产精品免费一区二区三区四区 | 亚洲免费观看视频网站 | 亚洲精品中文字幕 | 精品国产乱码久久久久久闺蜜 | 黄免费看| www.国产日本 | 欧美激情一区二区 | 免费在线看a | 亚洲一区二区三区四区五区午夜 | 亚洲精品一区在线 | 国产成人精品一区二区三区四区 | 精品伦精品一区二区三区视频 | 天天躁日日躁狠狠很躁 | 国产69精品久久久久777 | 天天av网 | 久久精品日产第一区二区三区 | 超碰欧美 | 久久精品色欧美aⅴ一区二区 | 日韩欧美专区 | 免费看黄色小视频 | 国产精品免费在线 | 久久99精品视频 | 国产精品一区久久久 | 亚洲成人综合在线 | 欧美久久久久久久久 | 国产欧美精品一区二区 | 久久久久久国产精品免费免费男同 | 毛片一级片| 亚洲免费人成在线视频观看 | 伊人久久大香线 | av在线天堂 | 久久麻豆精品 | 狠狠色综合久久丁香婷婷 | 国产精品高潮呻吟久久av黑人 | 欧美精品一区二区三区四区五区 | 涩涩视频在线观看免费 | 日韩中文字幕 | 91免费观看视频 |