Java并发编程之-set集合的线程安全类
Java中set集合怎么保证线程安全,这种方式你知道吗?
在Java中set集合是
本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《并发集合系列》教程的第二篇:
本文主要内容:Set集合子类底层分别是什么?基于底层为什么set的子类可以存放一个数据?怎么解决set线程安全问题?
一:Set集合子类
Set的三个子类分别是:HaseSet、TreeSet、LinkedHashSet.这三个都是线程不安全的。那么这三个子类的底层是什么?
二:三个子类底层
1:haseSet的底层其实是hashMap
2:treeSet的底层其实就是一个TreeMap
3:linkedHashSet底层LinkedHashMap
三:set添加的时候只有一个参数怎么做到的?
通过上面我们可以看出,set三个子类的底层其实都是Map的。我们也知道Map是key-value键值对出现的。我们也知道,set添加方法是set.add(“司小司”)。参数只有一个,不是键值对的,那么底层Map怎么存储的呢?
我们来add方法的源码是怎么实现的吧:
从源码中,我们可以看到,把传递的参数作为key处理的。那么,value又是什么呢?
PRESENT是什么呢?
其实就是new了个object对象。
问题来了:set为什么不能不能存放重复值,而list就可以了呢?
从上面add的源码中,我们可以看出,add的数据是作为map的key来存放的。在Map中,Key是不能重复的。所以,set里面的数据不能有重复的。
四:Set集合怎么实现线程安全?
方案一:
和list一样,使用Colletcions这个工具类syn方法类创建个线程安全的set.
Set<String> synSet = Collections.synchronizedSet(new HashSet<>());
方案二:
使用JUC包里面的CopyOnWriteArraySet
Set<String> copySet = new CopyOnWriteArraySet<>();
总结:
创建set有五种方法,其中通过三个子类直接创建出来的是线程不安全的。想要创建线程安全的set可以通过工具类或者是juc包下相关的类创建。如下图:
相关推荐
《JAVA并发编程艺术》是Java开发者深入理解和掌握并发编程的一本重要著作,它涵盖了Java并发领域的核心概念和技术。这本书详细阐述了如何在多线程环境下有效地编写高效、可靠的代码,对于提升Java程序员的技能水平...
在Java编程中,多线程安全集合是程序员在并发环境下处理数据共享时必须考虑的关键概念。这些集合确保了在多个线程访问时的数据一致性、完整性和安全性,避免了竞态条件、死锁和其他并发问题。Java提供了一系列的线程...
Java提供了一系列的并发集合类,使得在并发环境中实现高效且线程安全的数据处理成为可能。这些集合主要存在于`java.util.concurrent`包中,设计目标是提高并发性能并减少同步开销。 首先,我们要了解Java并发集合的...
《Java并发编程实践》这本书是Java并发编程领域的经典之作,由Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes和Doug Lea合著,旨在帮助Java开发者理解和掌握如何在多线程环境中编写高效、...
Java并发工具包提供了一些线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList和CopyOnWriteArraySet等。这些集合在内部实现了线程安全的修改操作,可以在并发环境中高效地进行读写操作,无需额外的同步...
Java并发编程是处理多线程程序的一套编程技术,它允许程序员编写能够在多处理器或多个线程环境下执行的代码。在并发编程中,线程是最小的执行单元,线程模型主要描述了线程的创建、管理和调度的方式。Java中的线程...
本资源包“java基础(多线程,IO,集合,网络编程,泛型)”提供了对Java核心技术的全面介绍,包括五个核心主题:多线程、输入/输出(IO)、集合框架、网络编程和泛型。以下是对这些主题的详细讲解: 1. **多线程**: - ...
8. **并发集合类**:Java提供了并发安全的集合类,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, `BlockingQueue`等,它们内部实现了线程安全的算法,可以在多线程环境下高效使用。 9. **线程中断**:`interrupt...
多线程是Java的重要特性,允许程序并发执行多个任务,提高了CPU利用率,但也带来了线程安全问题,需要管理共享资源的访问,防止数据竞争。 在Java中,多线程的创建和管理是通过调用Thread类的start()方法来启动新...
Java集合框架提供了线程安全的容器,如Vector、Collections.synchronizedList()、ConcurrentHashMap等,它们在多线程环境下自动进行同步。 总之,Java多线程编程是高效利用系统资源、提升程序性能的重要手段。理解...
Java Concurrency API中的原子类,如AtomicInteger和AtomicLong,提供了原子操作,以确保在并发环境下的线程安全。 Java Concurrency API中的Lock接口是一种提供了比synchronized更为灵活和强大锁定操作的机制。它...
解决线程安全问题的方法包括使用synchronized关键字,或者使用java.util.concurrent包下的并发集合类和原子变量等。 知识点十:并发编程设计模式 在并发编程中,为了更好地解决常见的并发问题,设计了一系列并发...
在Java编程语言中,线程安全是多线程环境下编程时必须考虑的重要因素。线程安全的循环单链表是一种高效的数据结构,它允许在并发环境中进行插入、删除和遍历操作而不会出现数据不一致的情况。这篇博客文章将探讨如何...
这份"JAVA高级编程资料"涵盖了多线程、网络编程、文件与流以及集合类等重要主题,这些都是JAVA开发中不可或缺的部分。 首先,多线程是现代应用中并发执行任务的基础。JAVA提供了丰富的API来支持多线程编程,如...
13. **并发集合**:Java并发库提供了一些线程安全的集合,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, `ConcurrentLinkedQueue`等,它们在多线程环境下表现更优。 在实际项目中,理解和熟练运用这些多线程知识...
`Executor`框架是Java并发编程的核心组件之一,它提供了创建和管理线程池的能力,通过`ExecutorService`接口可以执行异步任务。`Future`对象用于获取异步任务的结果,支持阻塞和非阻塞两种模式,是处理异步计算结果...