随笔分类 -  JUC

Java.uitl.concurrent包
摘要:一、Java线程调度 1.抢占式调度:指的是每条线程执行的时间、线程的切换都由系统控制。系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。 2.协同式调度:指某一线 阅读全文
posted @ 2019-11-23 14:53 MrHH 阅读(4174) 评论(0) 推荐(0)
摘要:一、用于解决多线程安全问题的方式 synchronized:隐式锁 1)同步代码块 2)同步方法 JDK1.5后 3)同步锁 Lock 注意:是一个显式锁,需要通过lock()方法上锁,必须通过unlock()方法进行释放锁。 1 public class TestLock { 2 public s 阅读全文
posted @ 2019-11-23 12:48 MrHH 阅读(266) 评论(0) 推荐(0)
摘要:一、生产者消费者案例 1、使用synchronized关键字实现 1 public class TestProductorAndConsumer { 2 public static void main(String[] args) { 3 Clerk clerk = new Clerk(); 4 P 阅读全文
posted @ 2019-11-23 12:43 MrHH 阅读(344) 评论(0) 推荐(0)
摘要:通过Callable和Future创建线程 i. 创建Callable接口的实现类,并实现call方法,该call方法将作为线程执行体,并且有返回值,可以抛出异常。 ii. 创建Callable实现类的实例,使用FutureTask类包装Callable对象,该FuturedTask对象封装了Cal 阅读全文
posted @ 2019-11-22 12:48 MrHH 阅读(589) 评论(0) 推荐(0)
摘要:为了提高性能,Java提供了读写锁,读写锁分为读锁和写锁。多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥,这是由JVM控制的。如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。 读锁 如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁。 写锁 如果你的代码修改数据, 阅读全文
posted @ 2019-11-22 12:38 MrHH 阅读(797) 评论(0) 推荐(0)
摘要:Java语言提供了一种稍弱的同步机制,即Volatile变量,用来确保变量的更新操作通知到其他线程。volatile变量不会被缓存在寄存器或对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。 Volatile变量具备两种特性: 变量可见性就是保证该变量对所有线程可 阅读全文
posted @ 2019-11-22 12:29 MrHH 阅读(261) 评论(0) 推荐(0)
摘要:一、CAS(无锁的执行者) CAS包含3个参数:内存值 V 旧的预期值 A 新值 B 当且仅当V值等于A值时,将V的值改为B值,如果V值和A值不同,说明已经有其他线程做了更新,则当前线程什么都不做,最后返回当前V的真实值。CAS操作是抱着乐观的态度进行的(乐观锁),它总是认为自己可以成功地完成操作。 阅读全文
posted @ 2019-11-21 13:21 MrHH 阅读(3106) 评论(0) 推荐(1)
摘要:一、CountDowmLatch(闭锁)(倒计数锁存器) 它相当于一个计数器。用一个给定的数值初始化CountDownLatch,之后计数器就从这个值开始倒计数,直到计数值达到零。 CountDownLatch类位于java.util.concurrent包下,在完成某些运算时,只有其他所有线程的运 阅读全文
posted @ 2019-11-21 12:49 MrHH 阅读(1409) 评论(0) 推荐(0)