并发编程
文章平均质量分 97
kai563596378
你知道的越多,你不知道的越多
展开
-
实现并发安全要注意哪些
并发安全类的线程安全定义Doug Lee:如果多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的。类的线程安全表现为:操作的原子性 内存的可见性不做正确的同步,在多个线程之间共享状态的时候,就会出现线程不安全。怎么才能做到类的线程安全?栈封闭所有的变量都是在方法内部声明的,这些变量都处于栈封闭状态。无状态没有任何成员变量的类,就叫无状态的类让类不可变让状态不可变,两种方式:1,加final关键字,对于一..原创 2020-12-02 18:00:13 · 197 阅读 · 0 评论 -
分支-死锁和活锁详解
一、死锁的形成死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。实际工作中,我们经常听到死锁,死锁到底是什么东西呢?那么接下来就用实际例子演示一下银行转账功能。用户转账的实体类:/** * @Author nanjunkai * @Description: 用户转账的实体类 * @Date 2020/12/1 18:08:10 */public class UserAccount { priva原创 2020-12-02 15:25:51 · 404 阅读 · 1 评论 -
线程池ThreadPoolExecutor
线程池什么是线程池?为什么要用线程池?降低资源的消耗。降低线程创建和销毁的资源消耗; 提高响应速度:线程的创建时间为T1,执行时间T2,销毁时间T3,免去T1和T3的时间 提高线程的可管理性。线程池的创建ThreadPoolExecutor,jdk所有线程池实现的父类各个参数含义 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, ..原创 2020-11-26 18:34:15 · 110 阅读 · 0 评论 -
阻塞队列
阻塞队列概念、生产者消费者模式1)当队列满的时候,插入元素的线程被阻塞,直达队列不满。2)队列为空的时候,获取元素的线程被阻塞,直到队列不空。生产者和消费者模式生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。生产者和消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此.原创 2020-11-26 11:02:01 · 78 阅读 · 0 评论 -
并发容器ConcurrentHashMap
一、HashMap和HashTable、位运算HashMap和HashTableHashMap:多线程会导致HashMap的Entry链表形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。HashTable:使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法,其他线程也访问HashTable的同步方法时,会进入阻塞或轮询状态。如线程1使用put进行元素添加,线程2不原创 2020-11-26 11:02:09 · 233 阅读 · 0 评论 -
显示锁和AQS,ReentrantReadWriteLock读写锁
显示锁和AQS1.Lock和synchronized关键字的区别?synchronized会比lock消耗的性能会少一点。因为lock是一个类,使用时需要创建一个对象的实例。而lock又比synchronized使用起来更灵活。 synchronized代码简洁。Lock:获取锁可以被中断,超时获取锁,尝试获取锁,读多写少用读写锁 synchronized会自动释放锁。Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁; synchronized阻塞。t原创 2020-11-26 11:02:18 · 188 阅读 · 0 评论 -
线程基础
线程基础、线程之间的共享和协作基础概念CPU核心数和线程数的关系核心数:线程数=1:1 ;使用了超线程技术后---> 1:2CPU时间片轮转机制又称RR调度,会导致上下文切换什么是进程和线程进程:程序运行资源分配的最小单位,进程内部有多个线程,会共享这个进程的资源线程:CPU调度的最小单位,必须依赖进程而存在。澄清并行和并发并行:同一时刻,可以同时处理事情的能力并发:与单位时间相关,在单位时间内可以处理事情的能力高并发编程...原创 2020-11-26 11:02:27 · 75 阅读 · 0 评论 -
java高并发之进程与线程的区别
目录理解进程与线程什么是进程,什么是线程?两者的区别是什么?进程和线程的区别图解的方式说明进程和线程的关系(重要)程序计数器为什么是私有的?虚拟机栈和本地方法栈为什么是私有的?一句话简单了解堆和方法区多进程和多线程区别Java中的多线程理解进程与线程什么是进程,什么是线程?两者的区别是什么?进程一个内存中运行的应用程序。每个进程都有自己独立的内存空间,但是一个进程中又有多个线程,比如我们Windows系统任务管理器中,一个运行的xx.exe就是一个进程。原创 2020-09-02 17:30:01 · 316 阅读 · 0 评论 -
ForkJoinPool线程池,线程的并发工具类
线程的并发工具类Fork-Join 什么是分而治之?规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到原问题的解为什么使用fork join框架? * @since 1.7 * @author Doug Lea */@sun.misc.Contendedpublic class ForkJoinPool extends AbstractExecutorService {Fo.原创 2020-11-26 11:02:36 · 175 阅读 · 0 评论 -
原子操作CAS,原子性操作类
原子操作CAS CAS的原理CAS(Compare And Swap),指令级别保证这是一个原子操作三个运算符: 一个内存地址V,一个期望的值A,一个新值B基本思路:如果地址V上的值和期望的值A相等,就给地址V赋给新值B,如果不是,不做任何操作。synchronized和CAS(悲观锁和乐观锁是抽象的)synchronized是悲观锁,这种线程一旦得到锁,其他需要锁的线程就挂起的情况就是悲观锁。 CAS操作的就是乐观锁,每次不加锁而是假设没有冲突而去完成某项操作,如...原创 2020-11-26 11:02:48 · 257 阅读 · 0 评论