摘要: volatile的理解:volatile是jvm提供的轻量级的同步机制 1.保证可见性2.不保证原子性3.禁止指令重排为什么叫轻量级同步呢,是因为它基本上遵从了jmm的规范, 但是它又不能保证可见性。所以是乞丐版的同步机制。 JMM的三大特性:原子性,可见性,有序性 jmm本身是一个抽象的概念并不真 阅读全文
posted @ 2021-06-17 23:36 圣金巫灵 阅读(99) 评论(0) 推荐(0) 编辑
摘要: $JDKPath$\bin\javap.exe -c $OutputPath$\$FileDirRelativeToSourcepath$\$FileNameWithoutAllExtensions$.class $OutputPath$ 使用: 结果: 阅读全文
posted @ 2021-06-17 21:24 圣金巫灵 阅读(46) 评论(0) 推荐(0) 编辑
摘要: demo: public class ThreadPoolExecutorTest { public static void main(String[] args) { Thread t = new Thread(() -> System.out.println("start...")); Thre 阅读全文
posted @ 2021-06-17 19:34 圣金巫灵 阅读(41) 评论(0) 推荐(0) 编辑
摘要: Demo: public class FutureTaskTest { public static void main(String[] args) throws Exception{ // 1. 使用线程 FutureTask task1 = new FutureTask(()-> { retur 阅读全文
posted @ 2021-06-17 17:54 圣金巫灵 阅读(38) 评论(0) 推荐(0) 编辑
摘要: Phaser是CountDownLatch和CyclicBarrier的升级版: demo: public class PhaserTest { public static void main(String[] args) { // 三个部分 int parties = 3; // 四个阶段 int 阅读全文
posted @ 2021-06-17 17:24 圣金巫灵 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 所有的线程必须同时到达栅栏位置,才能继续执行。栅栏用于等待其他线程。 CyclicBarrier可以使一定数量的线程反复地在栅栏位置处汇集。当线程到达栅栏位置时将调用await方法,这个方法将阻塞直到所有线程都到达栅栏位置。如果所有线程都到达栅栏位置,那么栅栏将打开,此时所有的线程都将被释放,而栅栏 阅读全文
posted @ 2021-06-17 16:52 圣金巫灵 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 使用: /** * 测试同时启动多个线程 * 这里调用t.start不会立刻启动,会等到CountDownLatch域值为零才启动,所以10个线程全部是await状态。等for循环执行到最后一次后,才同时start * */ public class LockTest { public static 阅读全文
posted @ 2021-06-17 15:07 圣金巫灵 阅读(41) 评论(0) 推荐(0) 编辑
摘要: wait和notify 等待和唤醒 , 需要包围在synchronized里,当获取到同一把锁,notify就能唤醒wait 1. wait和notify使用: 当只调用wait,不调用notify, public class TestWaitNotify { public static void 阅读全文
posted @ 2021-06-17 04:11 圣金巫灵 阅读(47) 评论(0) 推荐(0) 编辑