
并发编程
MU_kaka
仰天大笑出门去,我辈岂是蓬蒿人
展开
-
并发编程(5)AQS(AbstractQueuedSynchronizer)
1.AQS原理AQS(抽象队列同步)核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。CLH(Craig,Landin,and Hagersten)队列是一个虚拟的双向队列(虚拟的双...原创 2018-07-08 13:37:40 · 183 阅读 · 0 评论 -
jvm(7)happens-before 和 重排序
一.定义happens-brfore是用来指定两个操作之间的执行顺序,用来保证可见性。在java内存模型中,如果一个操作执行的结果要对另一个操作可见,那么这两个操作之间存在happens-before关系 二.happens-before规则 1.程序顺序规则 单线程中每个操作,总是前一个操作happens-before后一个操作 2.监视器锁...原创 2018-07-01 19:13:42 · 192 阅读 · 0 评论 -
并发编程(6)线程间通信
一.等待唤醒机制(wait,notify,notifyAll)1.基本概念 wait:将同步线程处于冻结状态,释放执行权,同时将线程对象存储到线程池 notify:唤醒线程池中某个等待线程 notifyAll:唤醒线程池中所有线程2.注意 (1)这些方法都需要定义在同步中 (2)这些方法必须要标示所属的锁 (3)为什么这三个方法要被定义在...原创 2018-07-09 10:59:19 · 167 阅读 · 0 评论 -
并发编程(1) 线程基本状态和线程的创建
一.线程基本状态 1.新建状态(new):线程对象创建后将纳入新建状态. Thread t = new Thread(); 2.就绪状态(Runnable):调用start()进入就绪状态 3.运行状态(running):CPU开始调度处于运行状态的线程,此线程才真正执行 4.阻塞状态(Blocked):处于运行时的线程由于某种原因暂时放弃了对CPU的使用权...原创 2018-07-05 21:14:13 · 232 阅读 · 0 评论 -
并发编程(2)synchronized原理及其优化
一. synchronized介绍及其原理1.synchronized介绍Synchronized可以保证一个共享资源在同一时间只被一个线程访问到。可以通过同步方法或同步代码块的方式实现同步。同步方法的常量池会有一个ACC_SYNCHRONIZED标志,当某个线程要访问某个方法时,会检查是否有ACC_SYNCHRONIZE,如果有则需要先获得监视器锁,方法执行完后再释放监视器锁同步...原创 2018-07-06 15:20:33 · 498 阅读 · 0 评论 -
并发编程(3)volatile
一.并发编程的特性原子性,可见性,有序性。只要有一个不能保证,就有可能导致程序的运行错误二.synchronizedsynchronized就能保障原子性,可见性,有序性,1.因为synchronized能保障任意一个时刻只有一个线程执行该代码块,自然就不存在原子性的问题2.在释放锁之前会将变量的修改刷新到主存中,因此保证可见性3.又因为每一时刻只有一个线程在执行代码,相当于让线程顺序执行同步代码...原创 2018-07-06 23:45:38 · 160 阅读 · 0 评论 -
并发编程(4)concurrent包
一.概述 java.util.concurrent包是专门为java并发编程而设计的包,有如下分类: (1)locks:显示锁(互斥锁和速写锁)相关 (2)atomic:原子变量类相关,是构建非阻塞算法的基础 (3)executor:线程池相关 (4)collections:并发容...原创 2018-07-07 17:49:10 · 487 阅读 · 0 评论