2020年8月13日

摘要: LockSupport 当需要阻塞或唤醒一个线程的时候,都会使用LockSupport工具类来完成相应 工作。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功 能,而LockSupport也成为构建同步组件的基础工具。 LockSupport 是用来创建锁和其他 阅读全文
posted @ 2020-08-13 18:22 shumeigang 阅读(113) 评论(0) 推荐(0)
摘要: ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的ThreadLocal变量 ThreadLocal提供了线程的局部变量,每个线程都可以通过set()和get()来对这个局部 阅读全文
posted @ 2020-08-13 18:20 shumeigang 阅读(107) 评论(0) 推荐(0)
摘要: Lock接口 Lock不是Java中的关键字而是 java.util.concurrent.locks 包中的一个接口。下面我们简单介绍一下Lock接口。 一、Lock接口简介 Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有 阅读全文
posted @ 2020-08-13 18:19 shumeigang 阅读(175) 评论(0) 推荐(0)
摘要: 什么是等待/通知机制? 多个线程之间也可以实现通信,原因就是多个线程共同访问同一个变量。但是这种通信机制不是 “等待/通知” ,两个线程完全是主动地读取一个共享变量。简单的说,等待/通知机制就是一个【线程A】等待,一个【线程B】通知(线程A可以不用再等待了)。 场景:一个线程修改了一个对象的值,而另 阅读全文
posted @ 2020-08-13 09:52 shumeigang 阅读(267) 评论(0) 推荐(0)
摘要: 方法介绍 suspend():暂停任务 resume():恢复任务 stop():停止任务 stop() 当调用stop()方法时会发生两件事: 即刻停止run()方法中剩余的全部工作,包括在catch或finally语句中,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此 阅读全文
posted @ 2020-08-13 09:46 shumeigang 阅读(250) 评论(0) 推荐(0)
摘要: interrupt() 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行。 该方法经常用来“吵醒休眠的线程“。 当一些线程调用sleep() 方法处于休眠状态时,一个占有CPU资源的线程可以让休眠的线程 阅读全文
posted @ 2020-08-13 09:37 shumeigang 阅读(204) 评论(0) 推荐(0)
摘要: happens-before是JMM最核心的概念 happens-before字面翻译过来就是先行发生,A happens-before B 就是A先行发生于B? 不准确!在Java内存模型中,happens-before 应该翻译成:前一个操作的结果可以被后续的操作获取。讲白点就是前面一个操作把变 阅读全文
posted @ 2020-08-13 09:32 shumeigang 阅读(141) 评论(0) 推荐(0)
摘要: final域的内存语义 对于final域,编译器和处理器要遵守两个重要的重排序规则: 1:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 2:初次读一个包含final域的对象的引用,与随后初次都这个final域,这两个操作之间不能重排 阅读全文
posted @ 2020-08-13 09:31 shumeigang 阅读(120) 评论(0) 推荐(0)
摘要: synchronized 的实现原理与应用 synchronized 称为 重要级锁 Synchronized的作用主要有三个: 原子性:确保线程互斥的访问同步代码;可见性:保证共享变量的修改能够及时可见,其实是通过Java内存模型中的 “对一个变量unlock操作之前,必须要同步到主内存中;如果对 阅读全文
posted @ 2020-08-13 09:29 shumeigang 阅读(158) 评论(0) 推荐(0)

导航