摘要:1、ABA问题描述 在多线程场景下CAS会出现ABA问题,关于ABA问题这里简单科普下,例如有2个线程同时对同一个值(初始值为A)进行CAS操作,这三个线程如下: 线程1,期望值为A,欲更新的值为B 线程2,期望值为A,欲更新的值为B 线程1抢先获得CPU时间片,而线程2因为其他原因阻塞了,线程1取
阅读全文
摘要:目录: 1、volatile 关键字与内存可见性2、原子变量与 CAS 算法3、同步容器类4、闭锁 CountDownLatch5、使用 Callable 创建线程6、Lock 同步锁7、生产者消费者案例--虚假等待8、线程按序交替执行9、读写锁 ReadWriteLock10、线程八锁11、线程池
阅读全文
摘要:本文转自 http://www.jasongj.com/java/thread_safe/ 一、多线程编程中的三个核心概念 本篇文章将从这三个问题出发,结合实例详解volatile如何保证可见性及一定程序上保证顺序性,同时例讲synchronized如何同时保证可见性和原子性,最后对比volatil
阅读全文
摘要:一、为什么使用线程池 1)提高性能:系统启动一个新线程的成本是比较高的,而使用线程池避免了频繁地创建和销毁线程,可以很好地提高性能。线程池里的线程结束后并不会死亡,而是回到线程池中称为空闲线程,等待使用; 2)控制线程数量:使用线程池还可以有效地控制系统中并发线程的数量,当系统中包含大量并发线程时,
阅读全文
摘要:一、对多线程的理解 1.进程和线程 程序是指令和数据的有序集合,本身没有任何运行的含义,是一个静态的概念。几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。一个程序只有一个进程
阅读全文
摘要:1、写一个包子生产消费案例:一次生产或消费一个包子,有包子就消费,没有就生产。 1.1 写一个Baozi.class,包含main()方法,用来测试 package com.oy.demo3; /* * 包子生产消费案例:一次生产或消费一个包子,有包子就消费,没有就生产。 */ public cla
阅读全文
摘要:一、线程的生命周期 1、线程的5种状态:新建(New),就绪(Runnable),运行(Running),阻塞(Blocked),死亡(Dead) 2、线程的生命周期图解:(参考传智播客刘意2015Java基础视频讲义) 二、线程的状态转换图 1、线程的5种状态:新建(New),就绪(Runnabl
阅读全文