JAVA并发编程
文章平均质量分 80
strange先生
面向面试学习
展开
-
JAVA并发编程学习笔记10-volatile
JAVA并发编程学习笔记10-volatile概念JMM(JAVA内存模型)常见概念可见性指令重排序概念volatile关键字是由JVM提供的最轻量级的同步机制,它能保证内存可见性和防止指令重排序。JMM(JAVA内存模型)常见概念原子性:保证指令不会受到上下文切换的影响有序性:保证指令不会受到CPU并行优化的影响可见性:保证指令不会受到CPU缓存的影响可见性多核CPU,由于CPU速度远大于内存速度,故在CPU和内存之间,存在缓存,可以一定程度降低两者之间的差距。但也因此出现了主存和缓原创 2020-12-22 23:41:15 · 238 阅读 · 1 评论 -
JAVA并发编程学习笔记09-LockSupport
JAVA并发编程学习笔记09-LockSupport基本使用关键方法1.先调用park()再调用unpark()方法2.先调用unpark()再调用park()方法原理区别wait()和notify()基本使用关键方法park():使当前线程暂停,类似wait()方法unpark(Thread thread):唤醒指定线程,类似notify()方法1.先调用park()再调用unpark()方法@Slf4jpublic class Test { public static voi原创 2020-12-21 17:54:28 · 182 阅读 · 0 评论 -
JAVA并发编程学习笔记08-ReentrantLock
JAVA并发编程学习笔记08-ReentrantLock区别synchnorized二级目录三级目录区别synchnorized可中断可设置超时时间可设置公平锁需要手动开关锁支持多个条件变量二级目录三级目录原创 2020-12-17 16:57:05 · 153 阅读 · 0 评论 -
JAVA并发编程学习笔记07-死锁
JAVA并发编程学习笔记07-死锁什么是死锁如何避免死锁方法1:按相同顺序加锁方法2:设置过期时间什么是死锁由于直接将synchronized关键字加在方法上,会造成同步代码区域过广,导致并发效率很低,故往往会优化只加尽可能少的代码块,减少锁的粒度,但也因此会出现死锁的情况。@Slf4jpublic class Test03 { public static void main(String[] args) { Object lockA = new Object();原创 2020-12-12 00:12:01 · 144 阅读 · 0 评论 -
JAVA并发编程学习笔记06-synchronized及锁优化
JAVA并发编程学习笔记06-synchronized及锁优化monitor二级目录三级目录monitor二级目录三级目录原创 2020-12-07 18:05:20 · 136 阅读 · 0 评论 -
JAVA并发编程学习笔记05-线程通信
JAVA并发编程学习笔记05-线程通信两个线程之间的通信(保护性暂停)多个线程之间的通信(消息队列)两个线程之间的通信(保护性暂停)针对两个线程实现信息通信,可以通过中间对象实现。@Slf4jpublic class Test03 { public static void main(String[] args) throws InterruptedException { GuardedObject guardedObject = new GuardedObject();原创 2020-12-04 16:54:14 · 112 阅读 · 0 评论 -
JAVA并发编程学习笔记03-线程状态
线程状态操作系统层面JAVA层面区别和联系操作系统层面1.初始状态:线程创建但未运行2.可运行状态:处于可以运行的状态,但未获取到时间片,一但系统分配时间片,就会转换为运行状态3.运行状态:处于正在运行的状态4.阻塞状态:调用了阻塞API,如处于IO操作等,系统会自动让其进入阻塞状态,不会进行时间片竞争,直到被唤醒,然后变为可运行状态5.终止状态:程序运行结束JAVA层面定义在Thread类的State枚举中,分为如下6种。1.NEW:线程创建了,但未调用start()方法2.RUN原创 2020-12-01 14:48:51 · 87 阅读 · 0 评论 -
JAVA并发编程学习笔记04-多线程常用方法
多线程常用方法Object类waitnotifynotifyAllThread类joinsleepinterruptObject类waitwait():无期限的等待,直到被notify()或notifyAll()方法唤醒,或被interrupt()方法打断;wait(long timeout):效果同wait(),区别在于最多等待指定毫秒值的时间;wait(long timeout, int nanos):同上,多一个参数是指纳秒值,但实际上该纳秒值并不准确,无论输入多少,相当于毫秒值加一;原创 2020-11-30 18:32:32 · 134 阅读 · 0 评论 -
JAVA并发编程学习笔记02-创建线程的三种方式
创建线程的三种方式方式一:继承Thread类方式二:实现Runnable接口方式三:FutureTask + Callable总结方式一:继承Thread类继承Thread类,重写run方法public class Test01 { public static void main(String[] args) { new Task01().start(); }}class Task01 extends Thread { @Override publ原创 2020-11-29 22:28:02 · 142 阅读 · 0 评论 -
JAVA并发编程学习笔记01-基本概念
JAVA并发编程学习笔记进程和线程的区别并发编程的三个概念可见性功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入进程和线程的区别百度往往得到的答案是:“进程是资源分配的最小单位,线程是CPU调度的最小单位”,十个有九个看不明白,原创 2020-06-24 16:48:42 · 158 阅读 · 0 评论