摘要: 自旋锁:线程状态及上下文切换消耗系统资源,当访问共享资源的时间短,频繁上下文切换不值得。JVM实现,使线程在没获得锁的时候不被挂起,转而执行空循环,循环几次之后,如果还没能获得锁,则被挂起 阻塞锁:阻塞锁改变了线程的运行状态,让线程进入阻塞状态进行等待,当获得相应的信号(唤醒或者时间到)时,才可以进 阅读全文
posted @ 2021-05-25 21:39 Gen2021 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 饿汉式--本身线程安全 在类加载的时候,就已经进行实例化,无论之后用不用到。如果该类比较占内存,之后又没用到,就白白浪费了资源 public class HungerSingleton { private static final HungerSingleton INSTANCE = new Hun 阅读全文
posted @ 2021-05-25 20:58 Gen2021 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 能且仅能修饰变量 保证该变量的可见性,volatile关键字仅仅保证可见性,并不保证原子性 禁止指令重排序 A、B两个线程同时读取volatile关键字修饰的对象,A读取之后,修改了变量的值,修改后的值对B线程来说,是可见的 使用场景: 作为线程开关 单例,修饰对象实例,禁止指令重排序 阅读全文
posted @ 2021-05-25 20:33 Gen2021 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 内置锁 每个Java对象都可以用作一个实现同步的锁,这些锁称为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。 互斥锁 内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获 阅读全文
posted @ 2021-05-25 20:25 Gen2021 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 运行(RUNNABLE):处于可运行状态的线程正在JVM中执行,但它可能正在等待来自操作系统的其它资源,例如处理器。 阻塞(BLOCKED):线程阻塞于synchronized锁,等待获取synchronized锁的状态。 等待 阅读全文
posted @ 2021-05-25 15:58 Gen2021 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 进程:是系统进行分配和管理资源的基本单位 线程:进程的一个执行单元,是进程内调度的实体、是CPU调度和分派的基本单位,是比进程更小的独立运行的基本单位。线程也被称为轻量级进程,线程是程序执行的最小单位。 一个程序至少一个进程,一个进程至少一个线程 进程有自己的独立地址空间,每启动一个进程,系统就会为 阅读全文
posted @ 2021-05-25 14:30 Gen2021 阅读(71) 评论(0) 推荐(0) 编辑