使用countDownLatch導致的線程安全問題,線程不安全的List-ArrayList,線程安全的List-CopyOnWriteArrayList

示例代碼

package com.example.demo.service;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class UnSafeCDTest {ExecutorService executorService = Executors.newFixedThreadPool(5);public static void main(String[] args) throws InterruptedException {for(int i = 0; i < 20; i++){UnSafeCDTest unSafeCDTest = new UnSafeCDTest();unSafeCDTest.test();}}public void test() throws InterruptedException {List<String> list = new ArrayList<>();//  List<String> list = new CopyOnWriteArrayList<>();CountDownLatch countDownLatch = new CountDownLatch(5);for (int i = 0; i < 5; i++) {executorService.submit(() -> {// TODOlist.add("1" );// TODO// cdcountDownLatch.countDown();});}countDownLatch.await();System.out.println( list.size());}
}

輸出結果

image.png

可以看到有一個結果為4;
修改ArrayList為線程安全的List,CopyOnWriteArrayList;
驗證結果

image.png

CopyOnWriteArrayList為什么是線程安全的
查看源碼可以看到通過了加鎖實現了線程安全

/*** Appends the specified element to the end of this list.** @param e element to be appended to this list* @return {@code true} (as specified by {@link Collection#add})*/public boolean add(E e) {final ReentrantLock lock = this.lock;lock.lock();try {Object[] elements = getArray();int len = elements.length;Object[] newElements = Arrays.copyOf(elements, len + 1);newElements[len] = e;setArray(newElements);return true;} finally {lock.unlock();}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80454.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ALLinSSL:一站式SSL證書管理解決方案

引言 在當今互聯網安全日益重要的背景下,SSL證書已成為保護網站安全的必備工具。然而,管理多個SSL證書常常是一項繁瑣且容易出錯的任務。ALLinSSL應運而生,它提供了一個一站式的SSL證書管理解決方案,大大簡化了證書的申請、安裝和更新過程。本文將深入介紹ALLinSSL的特性、…

嵌入式通信協議總覽篇:萬物互聯的基石

嵌入式系統的世界,是靠協議“說話”的世界。 在你設計一個智能設備、構建一個工業控制系統、開發一款 IoT 網關時,一個核心問題始終繞不開:**這些設備之間如何“對話”?**答案就是——通信協議。 本篇作為系列第一章,將帶你全面理解嵌入式通信協議的全貌,為后續深入學習…

【數據結構】紅黑樹(C++)

目錄 一、紅黑樹的概念 二、紅黑樹的性質 三、紅黑樹結點定義 四、紅黑樹的操作 1. 插入操作 1.1 插入過程 1.2 調整過程 1.2.1 叔叔節點存在且為紅色 1.2.2 叔叔節點存在且為黑色 1.2.3 叔叔節點不存在 2. 查找操作 2.1 查找邏輯 2.2 算法流程圖 2.3 使用示例 …

Oracle數據庫DBF文件收縮

這兩天新部署了一套系統&#xff0c;數據庫結構保持不變&#xff0c;牽扯導出表結構還有函數&#xff0c;圖省事就直接新建用戶&#xff0c;還原數據庫了。然后咔咔咔&#xff0c;一頓刪除delete&#xff0c;truncate&#xff0c;發現要不就是表刪了&#xff0c;還有num_rows&a…

【字節擁抱開源】字節豆包團隊開源首發 Seed-Coder 大模型

我們非常高興地向大家介紹 Seed-Coder&#xff0c;它是一個功能強大、透明、參數高效的 8B 級開源代碼模型系列&#xff0c;包括基礎變體、指導變體和推理變體。Seed-Coder 通過以下亮點促進開放代碼模型的發展。 以模型為中心&#xff1a;Seed-Coder主要利用大語言模型&#…

Qt 無邊框窗口,支持貼邊分屏

常規操作, 無法進行窗口的大小縮放和移動貼邊分屏等操作 // 去掉標題欄,去掉工具欄&#xff0c;窗口置頂 setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);重點介紹 QWindowKit https://github.com/stdware/qwindowkit 跨平臺的支持Windows\…

Qt 樣式表:全面解析與應用指南

在 Qt 開發中,樣式表(Style Sheets)是定義應用程序界面外觀的關鍵工具。它采用文本格式的規則集合,借鑒了 CSS 語法,借助選擇器、屬性和值,能精準把控各類控件的外觀表現,極大提升了界面設計的靈活性與美觀性。 文章目錄 一、樣式可更改的效果?1、顏色相關效果?2、字體…

追蹤大型語言模型的思想(上)(來自針對Claude的分析)

概述 像 Claude 這樣的語言模型并非由人類直接編程&#xff0c;而是通過大量數據進行訓練。在訓練過程中&#xff0c;它們會學習解決問題的策略。這些策略被編碼在模型為每個單詞執行的數十億次計算中。對于我們這些模型開發者來說&#xff0c;這些策略是難以捉摸的。這意…

Python pandas 向excel追加數據,不覆蓋之前的數據

最近突然看了一下pandas向excel追加數據的方法&#xff0c;發現有很多人出了一些餿主意&#xff1b; 比如用concat,append等方法&#xff0c;這種方法的會先將舊數據df_1讀取到內存&#xff0c;再把新數據df_2與舊的合并&#xff0c;形成df_new,再覆蓋寫入&#xff0c;消耗和速…

MYSQL 索引和事 務

目錄 一 MYSQL 索引介紹 1.索引概念 2.索引作用 3.索引的分類 3.1普通索引 3.2唯一索引 3.3組合索引&#xff08;最左前綴&#xff09; 3.4全文索引 4.3查看索引 4.4刪除索引 二 MYSQL事務 一&#xff1a;MYSQL索引介紹 索引是一個排序的列表,在這個列表中存儲著索…

【C/C++】ARM處理器對齊_偽共享問題

文章目錄 1 什么是偽共享&#xff1f;2 為什么對齊&#xff1f;3 偽共享的實際影響4 為什么必須是 64 字節&#xff1f;5 其他替代方案6 驗證對齊效果總結 1 什么是偽共享&#xff1f; 偽共享是 多線程編程中的一種性能問題&#xff0c;其本質是&#xff1a; 緩存行&#xff…

Kafka Controller的作用是什么?故障時如何恢復? (管理分區和副本狀態;通過ZooKeeper選舉新Controller)

Apache Kafka Controller 是 Kafka 集群的核心協調組件&#xff0c;主要承擔兩大核心職責&#xff1a; 一、核心作用 分區領導者選舉 1 // 分區領導者選舉邏輯示例&#xff08;偽代碼&#xff09; def electLeader(partition: Partition): Unit {val isr partition.inSync…

阿里云前端Nginx部署完,用ip地址訪問卻總訪問不到,為什么?檢查安全組是否設置u為Http(80)!

根據你的描述&#xff0c;Ping測試顯示數據包無丟失但無法通過公網IP訪問服務&#xff0c;說明網絡基礎層&#xff08;ICMP協議&#xff09;是通暢的&#xff0c;但更高層&#xff08;如TCP/UDP協議或服務配置&#xff09;存在問題。以下是系統性排查與解決方案&#xff1a; 一…

關于STM32 SPI收發數據異常

問題描述&#xff1a; STM32主板做SPI從機&#xff0c;另一塊linux主板做主機&#xff0c;通信的時候發現從機可以正確接收到主機數據&#xff0c;但是主機接收從機數據時一直不對&#xff0c;是隨機值。 問題原因&#xff1a; 剛發現問題的時候&#xff0c;用邏輯分析儀抓包…

特勵達力科LeCroy推出Xena Freya Z800 800GE高性能的800G以太網測試平臺

Xena Freya Z800 800GE 是由全球領先的測試與測量解決方案提供商特勵達力科公司&#xff08;Teledyne LeCroy&#xff09;開發的高性能以太網測試平臺&#xff0c;專為滿足從10GE到800GE數據中心互連速度的需求而設計。特勵達力科公司在網絡測試領域擁有超過50年的技術積累&…

基于Django框架的股票分紅數據爬蟲和展示系統

項目截圖 一、項目簡介 本項目是一個基于 Django 框架的股票分紅數據爬蟲和展示系統。它可以從東方財富網站爬取股票分紅數據&#xff0c;并將數據存儲到 Django 數據庫中&#xff0c;同時提供數據查詢、導出和圖表展示功能。該系統為用戶提供了一個方便的平臺&#xff0c;用于…

nginx性能優化與深度監控

一、性能調優方向 1. 系統層面優化 內核參數調整 TCP隊列與連接管理&#xff1a; net.core.somaxconn&#xff08;最大連接隊列長度&#xff0c;建議設為65535&#xff09;net.ipv4.tcp_max_syn_backlog&#xff08;SYN隊列長度&#xff0c;建議65535&#xff09;net.ipv4.tc…

深入解析 Vision Transformer (ViT) 與其在計算機視覺中的應用

在近年來&#xff0c;深度學習尤其在計算機視覺領域取得了巨大的進展&#xff0c;而 Vision Transformer&#xff08;ViT&#xff09;作為一種新的視覺模型&#xff0c;它的表現甚至在許多任務中超過了傳統的卷積神經網絡&#xff08;CNN&#xff09;&#xff0c;如 ResNet。在…

PXE_Kickstart_無人值守自動化安裝系統

文章目錄 1. PXE2. 配置服務參數2.1 tftp服務配置2.2 dhcp服務配置2.3 http服務配置 3. 配置PXE環境3.1 網絡引導文件pxelinux.03.2 掛載鏡像文件3.3 創建配置文件default3.4 復制鏡像文件和驅動文件3.5 修改default文件3.6 配置ks.cfg文件 4. PXE客戶端4.1 創建虛擬機&#xf…