中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

Java使用代碼模擬高并發操作的示例-創新互聯

在java中,使用了synchronized關鍵字和Lock鎖實現了資源的并發訪問控制,在同一時間只允許唯一了線程進入臨界區訪問資源(讀鎖除外),這樣子控制的主要目的是為了解決多個線程并發同一資源造成的數據不一致的問題。在另外一種場景下,一個資源有多個副本可供同時使用,比如打印機房有多個打印機、廁所有多個坑可供同時使用,這種情況下,Java提供了另外的并發訪問控制--資源的多副本的并發訪問控制,今天使用的Semaphore即是其中的一種。

創新互聯從2013年創立,先為蕪湖等服務建站,蕪湖等地企業,進行企業商務咨詢服務。為蕪湖企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

Java通過代碼模擬高并發可以以最快的方式發現我們系統中潛在的線程安全性問題,此處使用Semaphore(信號量)和 CountDownLatch(閉鎖)搭配ExecutorService(線程池)來進行模擬,主要介紹如下:

1、Semaphore

JDK 1.5之后會提供這個類

Semaphore是一種基于計數的信號量。它可以設定一個閾值,基于此,多個線程競爭獲取許可信號,做完自己的申請后歸還,超過閾值后,線程申請許可信號將會被阻塞。Semaphore可以用來構建一些對象池,資源池之類的,比如數據庫連接池,我們也可以創建計數為1的Semaphore,將其作為一種類似互斥鎖的機制,這也叫二元信號量,表示兩種互斥狀態。

2、CountDownLatch

 JDK 1.5之后會提供這個類,

CountDownLatch這個類能夠使一個線程等待其他線程完成各自的工作后再執行。例如,應用程序的主線程希望在負責啟動框架服務的線程已經啟動所有的框架服務之后再執行。

CountDownLatch是通過一個計數器來實現的,計數器的初始值為線程的數量。每當一個線程完成了自己的任務后,計數器的值就會減1。當計數器值到達0時,它表示所有的線程已經完成了任務,然后在閉鎖上等待的線程就可以恢復執行任務。

如下圖:

以上兩個類可以搭配使用,達到模擬高并發的效果,以下使用代碼的形式進行舉例:

package modules;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class CountExample {
  // 請求總數
  public static int clientTotal = 5000;
  // 同時并發執行的線程數
  public static int threadTotal = 200;
  public static int count = 0;
  public static void main(String[] args) throws Exception {
    ExecutorService executorService = Executors.newCachedThreadPool();
    //信號量,此處用于控制并發的線程數
    final Semaphore semaphore = new Semaphore(threadTotal);
    //閉鎖,可實現計數器遞減
    final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);
    for (int i = 0; i < clientTotal ; i++) {
      executorService.execute(() -> {
        try {
         //執行此方法用于獲取執行許可,當總計未釋放的許可數不超過200時,
         //允許通行,否則線程阻塞等待,直到獲取到許可。
          semaphore.acquire();
          add();
          //釋放許可
          semaphore.release();
        } catch (Exception e) {
          //log.error("exception", e);
          e.printStackTrace();
        }
        //閉鎖減一
        countDownLatch.countDown();
      });
    }
    countDownLatch.await();//線程阻塞,直到閉鎖值為0時,阻塞才釋放,繼續往下執行
    executorService.shutdown();
    log.info("count:{}", count);
  }
  private static void add() {
    count++;
  }
}

本文題目:Java使用代碼模擬高并發操作的示例-創新互聯
轉載注明:http://www.2m8n56k.cn/article30/cdjjpo.html

成都網站建設公司_創新互聯,為您提供App開發搜索引擎優化用戶體驗全網營銷推廣網站改版手機網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設
主站蜘蛛池模板: 日韩精品一区二区三区在线观看 | 毛片亚洲毛片亚洲毛片 | 成人免费观看一区二区 | 99精品视频一区在线观看miya | 国产一级片免费观看 | 成年人免费网站视频 | 欧美美女一区二区三区 | 国产成人亚洲精品 | 欧美多人三级级视频播放 | 欧美一级久久久久久久大片 | 亚洲欧美日本在线观看 | 精品毛片视频 | 欧美日韩在线观看免费 | 手机看片国产免费永久 | 国产成人丝袜网站在线看 | 亚洲 欧美 成人日韩 | 久久精品国产亚洲片 | 亚洲精品国产成人一区二区 | 国产男女交性视频播放免费bd | 欧美午夜性春猛交 | 免费日本视频 | 亚洲国产精品日韩在线观看 | 久久久久久久久久久久久久久久久久 | 中文字幕在线精品 | 好吊色综合网天天高清 | 精品欧美小视频在线观看 | 中国国产一国产一级毛片视频 | 欧美性一区二区三区 | 成人在线中文字幕 | 中国hd高清╳xxx | 黄色在线播放 | 国产成人精品一区二区秒拍 | 美女流白浆网站 | 成人在线观看不卡 | 久久一区二区精品综合 | www.久草.com| 日本在线免费观看视频 | 欧美在线成人免费国产 | 欧美另类激情 | 国产精品久久久久久一区二区 | 亚洲免费专区 |