Java并发
从程序猿到程序员
努力吧骚年
展开
-
并发学习笔记(一)——多线程基础
概念并发级别阻塞无障碍无锁无等待其中无障碍、无锁、无等待都是非阻塞式的。无障碍(Obstruction-Free)(1) 无障碍是一种最弱的非阻塞调度(2)自由出入临界区,宽进严出(3)无竞争时,有限步内完成操作(4)有竞争时,回滚数据举例:一群线程同时进入临界区,当某线程发现数据被修改时,回滚自己的操作,重新进行操作。注:有可能所有线程互相影响,都不能完成任务。无...原创 2018-11-29 14:56:41 · 145 阅读 · 0 评论 -
并发学习笔记(二)——无锁
概念原子性原子性是指一个操作是不可中断的,即使是在多个线程一起执行的时候,一旦操作开始,就不会被其他线程干扰。有序性线程并发时,程序的执行可能就会出现乱序。可见性可见性是值当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道这个修改。无锁无锁类的原理CAS(compare and swap)CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内...原创 2018-11-30 16:48:51 · 151 阅读 · 0 评论 -
并发学习笔记(三)——并发包(同步控制工具)
ReentrantLock(重入锁)可重入:单线程可以重复进入(次数),但要重复退出(相同次数)public class TestReentrantLock implements Runnable { private static ReentrantLock lock = new ReentrantLock(); private static int i = 0; ...原创 2018-12-13 10:13:52 · 207 阅读 · 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 · 449 阅读 · 0 评论 -
并发学习笔记(五)——并发包(线程池--了解)
线程池使用线程池可以避免线程的创建和销毁的代价。线程池的大概实现:wait、notify、Runnable target。类Executor:顶层接口,具有execute方法。ExecutorService:提供了一些额外的方法,如shutdown、isShutdown等方法,还提供了submit(Callable)方法,提供线程执行的返回值。ThreadPoolExecutor:线...原创 2018-12-13 16:19:01 · 273 阅读 · 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 · 161 阅读 · 0 评论 -
并发学习笔记(七)——锁优化的思路和方法
锁优化的思路减少锁持有时间public synchroized void fun(){ otherCode1(); mutexMethod(); otherCode2();}尽量改为如下形式:public void fun(){ otherCode1(); synchroized(this){ mutexMethod(); } otherCode2();}尽可能...原创 2018-12-17 21:49:04 · 222 阅读 · 0 评论