日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

同步类容器

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 同步类容器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

同步類容器

是線程安全的

但是,在某些場景下
可能需要加鎖來保護復合操作

復合類操作,比如
迭代,反復訪問元素、遍歷完容器中所有元素
跳轉,根據指定的順序,找到當前元素的下一個元素
以及條件運算等

這些復合操作在多線程,并發的修改容器時
可能會表現出意外的行為,經典的是ConcurrentModificationException
因為,當容器迭代的過程中,被并發的修改了內容
這是,由于早期迭代器設計的時候,并沒有考慮并發修改的問題

同步類容器,比如
Vector、HashTable
這些容器的同步功能,其實
都是有JDK的Collections.Synchronized等,工廠方法去創建實現的

底層的機制,無非就是用傳統的synchronized關鍵字
對每個公用的方法都進行同步,使得每次只能有一個線程訪問容器的狀態

這明顯不是互聯網高并發的需求
在保證線程安全的同時,必須有有足夠好的性能

package com.bjsxt.base.coll012;import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Vector;/*** 多線程使用Vector或者HashTable的示例(簡單線程同步問題)*/ public class Tickets {public static void main(String[] args) {//初始化火車票池并添加火車票:避免線程同步可采用Vector替代ArrayList HashTable替代HashMapfinal Vector<String> tickets = new Vector<String>();for(int i = 1; i<= 1000; i++){tickets.add("火車票"+i);}for(int i = 1; i <=10; i ++){new Thread("線程"+i){public void run(){while(true){if(tickets.isEmpty()) break;System.out.println(Thread.currentThread().getName() + "---" + tickets.remove(0));}}}.start();}} }

運行

總結

以上是生活随笔為你收集整理的同步类容器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。