5.10(java学习笔记)容器的同步控制与只读设置
1、容器的同步控制
像我们平常使用的容器有些是不同步的即线程不安全,例如HashMap等,在多线程时可能出现并发问题。
而有些容器又是同步的,例如Hashtable。
有些时候我们需要将这些不同步的容器包装成同步的,就需要使用到Collections中提供的一些方法。
static <T> List<T> synchronizedList(List<T> list);
static <T> Set<T> synchronizedSet(Set<T> s);
static <K,V> Map<K,V> synchronizedMap(Map<K,V> m);
传递进去的是线程不同步的容器,返回一个线程同步的集合。
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; public class Test {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("1", "1");
map.put("2", "2");
map.put("3", "3");
//返回同步的容器
Map<String,String> synMap = Collections.synchronizedMap(map); List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
//返回同步的容器
List<String> synList = Collections.synchronizedList(list); Set<String> set = new HashSet<>();
set.add("1");
set.add("2");
set.add("3");
//返回同步的容器
Set<String> synSet = Collections.synchronizedSet(set);
}
}
返回的syn...就是同步的容器,是线程安全的。
2、容器的只读控制
static <T> List<T> unmodifiableList(List<? extends T> list)
static <K,V> Map<K,V>unmodifiableMap(Map<? extends K,? extends V> m)
static <T> Set<T> unmodifiableSet(Set<? extends T> s)
返回一个只读属性的容器。
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; public class Test{
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("1", "1");
map.put("2", "2");
map.put("3", "3");
//返回只读的容器
Map<String,String> unmoMap = Collections.unmodifiableMap(map);
//unmMap为只读,这时往里面放入元素会出现错误。
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
//返回同步的容器
List<String> unmoList = Collections.unmodifiableList(list);
//unmoList为只读,这时往里面放入元素会出现错误。
Set<String> set = new HashSet<>();
set.add("1");
set.add("2");
set.add("3");
//返回同步的容器
Set<String> synSet = Collections.unmodifiableSet(set);
//unmoSet为只读,这时往里面放入元素会出现错误。
}
}
3.单元素不可变容器
放置一个元素的不可变容器,创建时添加第一个元素后再次添加会报错。
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; public class Test{
public static void main(String[] args) {
//返回了只能放一个元素的集合
Map<String,String> singMap = Collections.singletonMap("1","1");//创建时已放入第一个元素
//如果再往singMap中添加元素会出错。 //返回了只能有一个元素的集合
List<String> singList = Collections.singletonList("1");
//如果再往singList中添加元素会出错。
}
}
4.不可变空集合
static <T> List<T> emptyList()
static <K,V> Map<K,V> emptyMap()
static <T> Set<T> emptySet()
返回一个空的不可变的集合。
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; public class Test{
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map = null;
if(reMap(map) == Collections.EMPTY_MAP)
System.out.println("true"); }
public static Map<String, String> reMap(Map<String, String> map){
if(map == null)
return Collections.emptyMap();
return map;
}
}
运行结果:
true
我们在调用某些方法时,判断传递进来的集合为空,可以使用Collections.empyt...()返回一个空的不可变集合,来避免NullPointerException.
5.10(java学习笔记)容器的同步控制与只读设置的更多相关文章
- Java学习笔记----容器
一.Java Collections框架是什么? Java Collections 框架中包括了大量集合接口以及这些接口的实现类和操作它们的算法(如:排序.查找.反转.替换.复制.取最小元素.取最大元 ...
- Java学习笔记——MySQL开放3306接口与设置用户权限
系统Ubuntu16.04 LTS 1.开放3306端口查看端口状态:netstat -an|grep 3306tcp 0 0 127.0.0.1:3306 ...
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记--Swing用户界面组件
很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- java学习笔记11--集合总结
java学习笔记系列: java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Ob ...
- java学习笔记之基础篇
java选择语句之switch //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...
随机推荐
- Leetcode 45. Jump Game II(贪心)
45. Jump Game II 题目链接:https://leetcode.com/problems/jump-game-ii/ Description: Given an array of non ...
- source改变当前路径
转摘自:http://hi.baidu.com/homappy/item/90e416525d2faf958c12edb7 Shell 脚本执行有三种方法 bash 脚本名 sh 脚本名 chmod ...
- 【bzoj2219-数论之神】求解x^a==b(%n)-crt推论-原根-指标-BSGS
http://www.lydsy.com/JudgeOnline/problem.php?id=2219 弄了一个晚上加一个午休再加下午一个钟..终于ac..TAT 数论渣渣求轻虐!! 题意:求解 x ...
- 预处理ifndef
#ifdef 详解 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有 ...
- 自建yum镜像
#!/usr/bin/python #-*- coding: utf-8 -*- import requests import sys,logging,traceback from bs4 impor ...
- 解决:centos7.3 tomcat7启动巨慢问题
目前公司大部分服务器操作系统还是centos6.5,tomcat用的是7,平时基本上没什么问题,启动也比较快,但是,最近有部分项目服务器更新至centos7.3 ,有些机器启动tomcat的时候巨慢无 ...
- 【 Linux 】为lnmp架构添加memcached支持
一.首先搭建lnmp平台,这里不再演示.通过php页面来进行测试如下: [root@node1 ~]# vim /usr/local/nginx/html/info.php <?php $lin ...
- 在 C# 中通过 P/Invoke 调用Win32 DLL
在 C# 中通过 P/Invoke 调用Win32 DLL 发布日期 : 1/13/2005 | 更新日期 : 1/13/2005 Jason Clark 下载本文的代码: NET0307.exe ( ...
- 《Java编程思想》笔记 第十二章 通过异常处理错误
1.异常也是对象 标准异常类都有两个构造器,一个默认,一个接受字符串. 抛异常与方法返回类型不同,但有相似效果使当前方法退出并返回,抛异常可以看作是一种不同的返回机制.(异同点不必深究) Throwa ...
- SQLAlchemy技术文档(中文版)-上
转自:http://www.cnblogs.com/iwangzc/p/4112078.html 1.版本检查 import sqlalchemy sqlalchemy.__version__ 2.连 ...