Java同步控制与不可变设置

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 14:22   30   0

同步控制:

多线程并发访问集合的线程安全

常用容器 Array List HashMap 等都是线程不安全的

Collections 提供了synchronizedXxx()方法,将指定容器包装成同步

synchronizedList()

synchronizedList()

synchronizedList()

package com.bjsxt.others.synread;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 使用Collections管理同步 容器
 * synchronizedList()
 synchronizedSet()
 synchronizedMap()

 * @author Administrator
 *
 */
public class Demo01 {

 /**
  * @param args
  */
 public static void main(String[] args) {
  List<String> list =new ArrayList<String>();
  list.add("a");
  list.add("b");
  //list可以同步
  List<String> synList =Collections.synchronizedList(list);
  System.out.println("线程安全的list制作完毕");
 }

}

不可变设置:

“只读” 访问,Collections提供了三种方法

1. emptyXxx() 空的不可变的集合

2. singletonXxx() 一个元素不可变的集合

3. unmodifiableXxx() 不可变容器

package com.bjsxt.others.synread;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 只读设置
 * emptyXxx()  空的不可变的集合 
 * 1、emptyList() 
 *    emptyMap()
 *    emptySet()
2、singletonXxx() 一个元素不可变的集合
singleton(T o) 
singletonList(T o) 
singletonMap(K key, V value) 

3、unmodifiableXxx() 不可变容器
unmodifiableList(List<? extends T> list) 
unmodifiableSet(Set<? extends T> s) 
unmodifiableMap(Map<? extends K,? extends V> m) 
 * @author Administrator
 *
 */
public class Demo02 {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Map<String,String> map =new HashMap<String,String>();
  
  map.put("test", "test");
  map.put("bjsxt", "bjsxt");
  
  //只读控制
  Map<String,String> map2 =Collections.unmodifiableMap(map);
  //map2.put("a", "a"); //不能操作
  System.out.println(map2.size());
  
  //一个元素的容器测试
  List<String> list =Collections.singletonList(new String());
  list.add("test");
  //list.add("bjsxt"); //只能包含一个元素的容器
 }
 
 public static Set<String> oper(Set<String> set){
  if(null==set){
   return Collections.EMPTY_SET; //外部获取避免NullPointerException
  }
  //操作
  return set;
 }

}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP