CopyOnWriteArrayList
ConcurrentHashMap
CopyOnWriteArraySet
public class SynCollectionTest {
//1.同步list: 每个线程都添加一个元素,看总数
private CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>(); //线程安全
//private List<String> list = new ArrayList<String>(); //线程不安全、会报错
public static void main(String[] args) {
SynCollectionTest o = new SynCollectionTest();
for(int i=0;i<100;i++) {
o.new ListThread().start();
}
}
class ListThread extends Thread{
public void run() {
list.add("str");
System.out.println(list.size());
}
}
}
public class SynMapTest {
private ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>(); //线程安全,键、值不能为空值
//private Hashtable<String, Integer> map = new Hashtable<String, Integer>(); //线程不安全
//private HashMap<String, Integer> map = new HashMap<String, Integer>(); //线程不安全,抛出异常
public static void main(String[] args) {
SynMapTest o = new SynMapTest();
for(int n=0;n<1000;n++) {
o.map.put("s"+n, new Integer(0));
}
//并发删除,抛出异常 java.util.ConcurrentModificationException
for(int i=0;i<10;i++) {
o.new MapThread().start();
}
}
class MapThread extends Thread{
public void run() {
Set<String> keys = map.keySet();
for(String k : keys) {
map.remove(k);
}
}
}
}
public class SynSet {
private CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<String>(); //线程安全
//private Set<String> set = new HashSet<String>(); //线程不安全,抛出异常java.util.ConcurrentModificationException
private Random r = new Random();
public static void main(String[] args) {
SynSet o = new SynSet();
for(int i=0;i<1000;i++) {
o.set.add(String.valueOf(o.r.nextInt(1000)));
}
for(int i=0;i<10000;i++) {
o.new SetThread().start();
}
}
class SetThread extends Thread{
public void run() {
Iterator<String> keys = set.iterator();
String k = null;
while(keys.hasNext()) {
k = keys.next();
set.remove(k);
}
}
}
}
相关推荐
多线程中使用Java集合类.doc
01大数据面试复习----Java基础---集合类、多线程、JVM.zip
多线程环境下如何正确使用Java集合类
Java集合类中,某个线程在 Collection 上进行迭代时,通常不允许另一个线性修改该 Collection。通常在这些情况下,迭代的结果是不确定的。如果检测到这种行为,一些迭代器实现(包括 JRE 提供的所有通用 collection ...
1. 使用正则表达式验证邮箱格式:演示如何使用正则表达式验证邮箱地址的格式是否有效。...10. 多线程编程:创建和启动线程:展示了如何通过实现Runnable接口创建一个新线程,并演示了多线程编程的基本概念。
JAVA核心知识点整理,涵盖JAVA基础、集合类、JVM、IO/NIO、多线程、Spring原理等知识。
31 Java 理论与实践 并发集合类.mht 32 Java 理论与实践 构建一个更好的 HashMap.mht 33 Java 理论与实践 JDK 5_0 中更灵活、更具可伸缩性的锁定机制.mht 34 Java 理论与实践 流行的原子.mht 35 Java 理论与实践...
Thread概念 Thread实现方法 Thread生命周期 Thread的安全和锁 Concurrent包(安全集合类、安全Queue) 线程阻塞机制 线程池详解(原理,实际使用) 线程的监控,分析方法 扩展数据库连接池
并发集合:JUC提供了一些线程安全的集合类,如ConcurrentHashMap、ConcurrentLinkedQueue等,可以在多线程环境下安全地访问和修改集合。 原子操作:JUC提供了一些原子操作类,如AtomicInteger、AtomicLong等,可以...
JAVA相关基础知识:面向对象的基本特征,集合类比较,简单数类型与包装类,异常捕捉,重载,重写
可以使用Java中的同步机制,如使用synchronized关键字或者使用线程安全的集合类来保证多线程操作的安全性。 实现步骤: 创建一个下载管理器类,用于管理下载任务和线程池。 在下载管理器中实现多线程下载的逻辑,...
对一个键可以同时存储多个值,类型安全,线程安全,附有测试代码
数俎 常用类 异常 集合 i0流 lambda 多线程 网络编程 反射 注解
1.线程池 (Thread Pool): 线程池是用于执行异步任务的托管线程集合。当你想执行许多类似的异步任务时,使用线程池可以有效地管理资源。 2.创建新线程 (Manual Thread): 你可以使用 Thread 类来创建并管理一个新线程...
1.1为什么需要多线程 1.2不安全示例 1.3并发问题的根源 1.4JMM 1.5线程安全的分类 1.6线程安全的方法 二、线程基础 2.1状态 2.2使用方式 2.3基础机制 2.4中断 2.5互斥同步 2.6线程合作 三、...
这两类都要使用到IO多路复用,O多路复用是指单个进程/线程就可以同时处理多个IO请求。有三个方式select、poll、epoll。 select:将文件描述符放入一个集合中,调用select时,将这个集合从用户空间拷贝到内核空间...
内容概要:以上列出的Java面试题涵盖了Java语言的基础知识、面向对象编程、集合、IO流、多线程、反射、类加载器、JVM、序列化、泛型、异常处理、注解等多个方面。 适用人群:以上Java面试题适用于准备Java开发...
每个示例都展示了不同的方面,涵盖了面向对象编程、继承和多态、接口和实现、异常处理、集合框架、文件操作、多线程、输入输出、Lambda表达式和数据库连接等关键主题。 以下是每个示例的简要介绍: 1. 类和对象:...
本资源包“Java多线程与线程安全实践-基于Http协议的断点续传.rar”是一个针对计算机科学专业学生设计的毕业设计或课程项目源码文件集合。该项目旨在通过实现一个基于HTTP协议的文件断点续传功能,深入探索和实践...
概念 • 实现方法 • 生命周期 • 安全和锁 • Concurrent包(安全集合类、安全Queue) • 线程阻塞机制 • 线程池详解(原理,实际使用) • 线程的监控,分析方法 • 扩展数据库连接池