随笔分类 - java多线程
摘要:CopyOnWriteArrayList CopyOnWrite思想就是将原来的数据copy一份出来修改,然后把修改后的数据替换原来的数据。在setArray之前并发读到的还是旧数据,弱一致性。 public boolean add(E e) { synchronized (lock) { Obje
阅读全文
摘要:java8比较实用的一个多线程api 开启一个异步任务supplyAsync public static void main(String[] args) { ExecutorService executor = Executors.newCachedThreadPool(); Supplier<L
阅读全文
摘要:大纲: 线程池的状态 构造函数 线程池执行任务的过程 Worker 线程池执行任务的主要方法 中断线程池主要方法 简要说明: 版本java1.8 以ThreadPoolExecutor线程池为代表介绍线程池。 一、线程池的状态 线程池由5个状态(ThreadPoolExecutor类中由5个常量标识
阅读全文
摘要:大纲: java线程的中断原则 中断相关方法 中断实例 一、java线程中断原则 java中断是一种协作机制,每一个线程的中断都由线程自己处理,其他线程只是给要中断的线程一个中断标志。 二、相关方法 1.把线程对象的中断标志置为true public void interrupt() 2.判断线程对
阅读全文
摘要:大纲: AbstractQueuedSynchronizer简介 aqs基本结构 lock流程 unlock流程 signal、await流程 Semaphore.acquire 一、AbstractQueuedSynchronizer简介 AbstractQueuedSynchronizer(抽象
阅读全文
摘要:主要成员变量: 构造函数: 主要方法: 应用: 结果: 上例中模拟4人到齐后才会各自开始做某事。但有5个人准备,当4个人到达CyclicBarrier后barrierAction先执行,barrierAction执行完成后,栅栏打开放开4个线程。最后一个到达线程的person0将被阻塞等待3个线程到
阅读全文
摘要:CountDownLatch 主要方法: 应用: 结果: 上例中模拟一个主服务和3个子服务启动,主服务的启动依赖子服务启动,只有当3个子服务都启动完成后主服务才会执行启动。 要点:
阅读全文
摘要:大纲 一、BlockingQueue接口 二、ArrayBlockingQueue 主要成员变量 构造函数 主要方法 取: 存: 阻塞队列阻塞的存取值方法通过2个condition的await和signal方法完成:当队列空时notEmpty.await取值阻塞,当队列满时notFull.await
阅读全文
摘要:大纲: 用法 源码 引用及内存泄漏 一、用法 ThreadLocal是一个容器,顾名思义就是把一个变量存到线程本地。 实际应用:中事务传播的时候将连接对象存入threadloacl,可以在同一个线程不同的代理类中被拿到。 class Test { public static void main(St
阅读全文
摘要:大纲: 一、cas cas:compareAndSwap,一种乐观锁。 cas思想:cas需要三个值,v是内存值,e是期望值,n是要修改的值。当内存中的值v等于预期值e(说明内存中的值没有被其他线程修改)、才可以修改v为n。 cas伪代码 cas是unsafe类中的native方法,是原子操作,保证
阅读全文
摘要:大纲: 一、wait、notify、notifyAll 二、Condition 三、生产消费者 生产者、消费者线程轮流执行,操作同一个资源。 消费者: 生产者: 资源对象-wait,notify实现: 资源对象-condition实现: 测试类
阅读全文
摘要:大纲: 一、ReadWriteLock 二、ReentrantReadWriteLock是ReadWriteLock的实现类 三、ReentrantReadWriteLock使用 官方demo:更新缓存后的锁降级,保持读锁。
阅读全文
摘要:大纲: Lock接口 synchronized&Lock异同 一、Lock public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); bo
阅读全文
摘要:线程共6状态 图片摘自:http://www.cnblogs.com/trust-freedom/p/6606594.html
阅读全文
摘要:大纲 sleep: 注意:sleep方法并不释放锁。 yield: yield是一个本地静态方法。 yield表示当前线程申请交出执行权,但并不是一定会交出,依赖于系统的线程调度。 因此该方法并不稳定。 注意:yield 方法放弃执行权但并不释放锁。 join: 之前看了一些博客说join就是把多线
阅读全文
摘要:大纲: 线程安全问题 synchronized代码块 原理简述 一、线程安全问题 多线程操作各自线程创建的资源的时候,不存在线程安全问题。但多线程操作同一个资源的时候就会出现线程安全问题。下例为两个线程操作同一个name资源时发生的问题。 class TestSyn { public static
阅读全文
摘要:大纲: 一、java创建线程--继承Thead类 创建一个类继承Thead类,并重写run方法。 二、java创建线程--实现Runnable接口 创建一个类实现Runnable接口,并重写run方法。 三、java创建线程--实现Callable接口 Callable接口中只有一个call方法,任
阅读全文
摘要:大纲: 一、java内存模型 java所有变量值都存在主内存里,每一个线程又拥有自己的工作内存,线程对变量的读写都在工作内存里完成,工作内存间相互隔离。 二、可见性、原子性、有序性 可见性:指当多个线程访问同一变量时,一个线程修改了这个变量的值,其他线程能访问这个变量是永远能够获取更新后的值。 保证
阅读全文

浙公网安备 33010602011771号