高并发下线程安全集合选择

11 篇文章 0 订阅
4 篇文章 0 订阅

线程不安全

会出现丢值或者重复的情况

Collection集合下的线程安全

重要:支持复合操作的线程安全的
1.CopyOnWriteArrayList();
2.CopyOnWriteHashMap

别的线程安全的,都是不支持复合操作的

  1. StringBuffer

1.List集合

CopyOnWriteArrayList();

  • 线程安全;
  • 支持复合操作及在迭代器中一遍编列 一边添加元素
  1. 原理:写入并复制,每次要创造新的并添加进去刚加的;内部lock锁加持使线程安全;自己复制自己的;添加自己的;所以可以复合操作
  2. List list =new CopyOnWriteArrayList();//要自己看学西怎么使用API
    synchronizedList();
  3. 是一个静态的方法 ;内部有个三目运算符;返回的是SynchronizedList对象 静态内部类
  4. 静态内部类是同步代码快 把List接口的方法全部重写一遍 把所有的方法写道同步代码块中;不会出现先出不安完的情况
  5. 属于第三次开发;
  •    一次开发:没有这个东西 我生成了
    
  •    二次开发: 对其进行封装
    
  •    三次开发 在已有的基础上在加写功能
    

Map集合下的线程安全

1.ConcurrentHashMap

  1. 原理:分占锁 默认16大小 有16个锁 每个锁代表一个对象 Segment 每个Segment存了一个Hash表 每个Hash表还能存链表 每个线程都有机会抢占到一个Segment 这个没有整体锁 并行 即可以在进程也可以体现在线程
  2. 性能:ConcurrentHashMap性能比HashTable快 他又16个锁 多个线程同时抢锁 并行 多个线程一起进行 可以同时删除和修改 不会出现并发修改异常

2.Hashtable

  1. 原理:独占锁 外面有个大锁;一个线程进去别的就进不去 串行 会出现并发修改异常
package Hashtable;

import java.util.Hashtable;
import java.util.Map;

//Hashtable
/*  
 *    是线程安全 性能满 采用的是独占锁
 *    Hashtable不可以让key或value存储null
 *  
 *    ConcurentHashMap  线程安全 
 *独占锁:    
 *    
 * 
 * */
public class Default {
	public static void main(String[] args) {
		Map<Integer,String> map =new Hashtable<>();
		//map.put(null, null);//键和值都不能为null
		map.put(1, "A");
		map.put(2, "B");
		map.put(3, "C");
		map.put(4, "D");
		System.out.println(map);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值