多线程
文章平均质量分 78
LallanaLee
这个作者很懒,什么都没留下…
展开
-
Java多线程编程基础(原子性,可见性和有序性)
文章引用:1https://www.jianshu.com/p/cf57726e77f22https://blog.csdn.net/eff666/article/details/66473088当前文章可以结合下面链接一起了解一下:https://blog.csdn.net/u013412772/article/details/80107643在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。一、原子性即一个操作或者多个操作,要么全..转载 2021-07-08 21:05:04 · 142 阅读 · 0 评论 -
并发容器
同步容器没有解决高并发下的性能问题,与手动锁住ArrayList和HashMap并没有什么区别,不论读还是写都会锁住整个容器。其次这种方式存在另一个问题:当多个线程进行复合操作时,是线程不安全的。在多线程的环境下,从Java5开始,java.util.concurent包下,提供了大量支持高效并发的访问的集合类。并发类容器是专门针对多线程并发设计的,使用了锁分段技术,只对操作的位置进行同步操作,但是其他没有操作的位置其他线程仍然可以访问,提高了程序的吞吐量。采用了CAS算法和部分代码使用synchr原创 2021-01-11 21:32:48 · 69 阅读 · 0 评论 -
同步容器
ArrayList、LinkedList、HashMap这些容器都是非线程安全的,如果有多个线程并发地访问这些容器时,就会出现问题。在编写程序时,必须要求程序员手动地在任何访问到这些容器的地方进行同步处理,这样导致在使用这些容器的时候非常地不方便。所以,Java提供了同步容器供用户使用。Java中的同步容器类 在Java中,同步容器主要包括2类: 1)Vector、Stack、HashTable 2)Collections类中提供的静态工厂方法创建的类 Vector实现了List原创 2021-01-09 18:20:10 · 80 阅读 · 0 评论 -
Queue的实现类
Queue接口中有以下几个常用实现类:PriorityQueue:非阻塞、非线程安全、无边界,支持优先级队列实现类。 ConcurrentLinkedQueue:非阻塞、线程安全、无边界,基于链接节点的队列实现类。 ArrayBlockingQueue:阻塞、线程安全、有边界,创建的时候指定大小,一旦创建容量不可改变实现类,默认是不保证线程的公平性,不允许向队列中插入null元素。 LinkedBlockingQueue:阻塞、线程安全、可选有边界,一个由链表结构组成的可选有界阻塞...原创 2021-01-09 03:55:56 · 3974 阅读 · 0 评论 -
java集合
Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.List 和 java.util.Set 。其中, List 的特点是元素有序、元素可重复。 Set 的特点是元素无 序,而且不可重复。...原创 2021-01-04 01:08:59 · 57 阅读 · 0 评论 -
ThreadLocal
定义:ThreadLocal提供了线程的局部变量,每个线程都可以通过set()和get()来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,实现了线程的数据隔离,也可以实现避免参数传递的访问方式(比如在代码中获取用户的信息,用的shiro框架,可以将用户的信息存到threadLocal中,只需要threadLocal.get()不需要传递参数就能在代码中获取用户信息)。threadLocal的使用的地方:1.在数据库连接池中,将connection交由ThreadLocal来进.原创 2020-10-18 21:37:23 · 103 阅读 · 1 评论 -
lock接口及与sync的比较
在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的。JDK1.5之后并发包(juc)中新增了Lock接口以及相关实现类来实现锁功能。synchronized是托管给JVM执行的,而lock是java写的控制锁的代码。在Java1.5中,synchronize是性能低效的。因为这是一个重量级操作,需要调用操作接口,导致有可能加锁消耗的系统时间比加锁以外的操作还多。相比之下使用Java提供的Lock对象,性能更高一些。但是到了Java1.6,发生了变化。synchronize在语原创 2020-10-13 22:36:10 · 1333 阅读 · 0 评论 -
CAS机制和ABA问题的解决
CAS 是英文单词 Compare And Swap 的缩写,翻译过来就是比较并替换。它当中使用了3个基本操作数:内存地址 V,旧的预期值 A,要修改的新值 B。采用的是一种乐观锁的机制,它不会阻塞任何线程,所以在效率上,它会比 synchronized 要高。所谓乐观锁就是:每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。1.什么是cas?cas是乐观锁的一种实现方式,是一种轻量级锁,在java1.5的时候开始引入2.cas的实现原理?cas有3个操作数,内存值V原创 2020-10-11 17:25:37 · 160 阅读 · 0 评论