生活随笔
收集整理的這篇文章主要介紹了
同步类容器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
同步類容器
是線程安全的
但是,在某些場景下
可能需要加鎖來保護復合操作
復合類操作,比如
迭代,反復訪問元素、遍歷完容器中所有元素
跳轉,根據指定的順序,找到當前元素的下一個元素
以及條件運算等
這些復合操作在多線程,并發的修改容器時
可能會表現出意外的行為,經典的是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) {
final 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();}}
}
運行
總結
以上是生活随笔為你收集整理的同步类容器的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。