摘要: 本篇文章主要是记录自己的学习笔记,主要内容是:公平锁、非公平锁、可重入锁、递归锁、自旋锁的理解,并实现一个自旋锁。 公平和非公平锁 (1)公平锁和非公平锁是什么? 公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到。 非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的循序,有可能 阅读全文
posted @ 2019-04-27 18:37 开嘴的板栗 阅读(1142) 评论(1) 推荐(0) 编辑
摘要: 小例子 输出结果: 若是不加volatile关键字呢? 输出结果: 阅读全文
posted @ 2019-04-22 20:07 开嘴的板栗 阅读(806) 评论(0) 推荐(0) 编辑
摘要: 一、饿汉式 缺点:不能懒加载 二、懒汉式(线程不安全) 三、懒汉式(线程安全,效率低) 四、懒汉式(线程安全,效率高,但是有空指针异常) 五、懒汉式(解决四的问题,禁止指令重排序,加volatile关键字) 六、内部静态类的更加优雅的方式 阅读全文
posted @ 2019-04-22 19:13 开嘴的板栗 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 输出结果: 阅读全文
posted @ 2019-04-22 17:57 开嘴的板栗 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 一、线程的生命周期 线程一个完整的生命周期要经历如下五种状态: 新建:当一个Thread类或者其子类的对象被声明并创建时,新生的线程对象处于新建状态 就绪:处于新建状态的西纳城被start()之后,将进入线程队列等待CPU时间片 运行:当就绪的线程被调度并会的处理器资源时,便进入运行状态,run() 阅读全文
posted @ 2019-04-21 21:52 开嘴的板栗 阅读(459) 评论(0) 推荐(0) 编辑
摘要: 一、基本概念:程序、进程、线程 程序(program):是为完成特定任务、用某种预研编写的一组指令的集合。即指一段静态的代码,静态对象 进程(process):是程序的依次执行过程,或是正在运行的一个程序。动态过程:有它自身的产生、存在和消亡的过程。 如:运行中的QQ,运行中的MP3播放器; 程序是 阅读全文
posted @ 2019-04-21 21:08 开嘴的板栗 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 线程按序交替打印 效果展示: 代码实现: package juc; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; public class Alternati 阅读全文
posted @ 2019-01-19 23:37 开嘴的板栗 阅读(575) 评论(0) 推荐(0) 编辑
摘要: 前言: 对于线程通信,使用synchronized时使用wait、notify和notifyAll来实行线程通信。而使用Lock如何处理线程通信呢?答案就是本片的主角:Condition. 一、Condition Condition,Condition 将 Object 监视器方法(wait、not 阅读全文
posted @ 2019-01-04 15:56 开嘴的板栗 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 为什么条件锁会产生虚假唤醒现象(spurious wakeup)? ​ 在不同的语言,甚至不同的操作系统上,条件锁都会产生虚假唤醒现象。所有语言的条件锁库都推荐用户把wait()放进循环里: ​ 这个一般出现在多线程竞争的时候,when no thread specifically broadcas 阅读全文
posted @ 2019-01-04 14:20 开嘴的板栗 阅读(558) 评论(1) 推荐(1) 编辑
摘要: 根据锁的添加到Java中的时间,Java中的锁,可以分为 “同步锁” 和 “JUC包中的锁” 。 一、同步锁 synchronized关键字 通过 synchronized关键字 来进行同步,实现对竞争资源的互斥访问的锁。 同步锁的原理是, 对于每一个对象,有且仅有一个同步锁 ;不同的线程能共同访问 阅读全文
posted @ 2019-01-04 13:34 开嘴的板栗 阅读(284) 评论(0) 推荐(0) 编辑