![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发
从程序猿到程序员
努力吧骚年
展开
-
并发学习笔记(一)——多线程基础
概念 并发级别 阻塞 无障碍 无锁 无等待 其中无障碍、无锁、无等待都是非阻塞式的。 无障碍(Obstruction-Free) (1) 无障碍是一种最弱的非阻塞调度 (2)自由出入临界区,宽进严出 (3)无竞争时,有限步内完成操作 (4)有竞争时,回滚数据 举例:一群线程同时进入临界区,当某线程发现数据被修改时,回滚自己的操作,重新进行操作。 注:有可能所有线程互相影响,都不能完成任务。 无...原创 2018-11-29 14:56:41 · 124 阅读 · 0 评论 -
并发学习笔记(二)——无锁
概念 原子性 原子性是指一个操作是不可中断的,即使是在多个线程一起执行的时候,一旦操作开始,就不会被其他线程干扰。 有序性 线程并发时,程序的执行可能就会出现乱序。 可见性 可见性是值当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道这个修改。 无锁 无锁类的原理 CAS(compare and swap) CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内...原创 2018-11-30 16:48:51 · 128 阅读 · 0 评论 -
并发学习笔记(三)——并发包(同步控制工具)
ReentrantLock(重入锁) 可重入:单线程可以重复进入(次数),但要重复退出(相同次数) public class TestReentrantLock implements Runnable { private static ReentrantLock lock = new ReentrantLock(); private static int i = 0; ...原创 2018-12-13 10:13:52 · 192 阅读 · 0 评论 -
并发学习笔记(四)——并发包(并发容器)
HashMap/List/Set 不是线程安全的容器。 可以使用Collections.synchronizedMap(Map map)进行包装,从而达到线程安全的目的,适合并发量比较小时使用。 public V get(Object key) { synchronized (mutex) {return m.get(key);} } ...原创 2018-12-13 10:59:01 · 425 阅读 · 0 评论 -
并发学习笔记(五)——并发包(线程池--了解)
线程池 使用线程池可以避免线程的创建和销毁的代价。 线程池的大概实现:wait、notify、Runnable target。 类 Executor:顶层接口,具有execute方法。 ExecutorService:提供了一些额外的方法,如shutdown、isShutdown等方法,还提供了submit(Callable)方法,提供线程执行的返回值。 ThreadPoolExecutor:线...原创 2018-12-13 16:19:01 · 247 阅读 · 0 评论 -
并发学习笔记(六)——涉及多线程的设计模式
单例模式 不用说,线程池等。 不变模式 一个类的内部状态创建后,在整个生命周期都不会发生改变,就是不变类。 不变模式不需要同步。 // final无子类 public final class Person{ private final String name; public Person(String name){ this.name = name; } public String g...原创 2018-12-13 17:07:05 · 149 阅读 · 0 评论 -
并发学习笔记(七)——锁优化的思路和方法
锁优化的思路 减少锁持有时间 public synchroized void fun(){ otherCode1(); mutexMethod(); otherCode2(); } 尽量改为如下形式: public void fun(){ otherCode1(); synchroized(this){ mutexMethod(); } otherCode2(); } 尽可能...原创 2018-12-17 21:49:04 · 200 阅读 · 0 评论