![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
安卓工匠
工匠精神
展开
-
Java中join使用
虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结。 一、作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。具体看代码: public class JoinTest { public static void main(String [] args) throws转载 2018-04-10 09:29:07 · 1833 阅读 · 1 评论 -
volatile(一)基础介绍
说简单点,volatile就是表示某人或某物是不稳定的、易变的。 volatile作为java中的关键词之一,用以声明变量的值可能随时会别的线程修改,使用volatile修饰的变量会强制将修改的值立即写入主存,主存中值的更新会使缓存中的值失效(非volatile变量不具备这样的特性,非volatile变量的值会被缓存,线程A更新了这个值,线程B读取这个变量的值时可能读到的并不是是线程A更新后的值)...原创 2019-04-25 13:58:41 · 108 阅读 · 0 评论 -
volatile(二)可见性测试
volatile 修饰的变量具有可见性,口说无凭,我们下面就测试一下。用代码来说明 public class TestVolatile2 { //测试一 // private static boolean isOk = true; //测试二 private static volatile boolean isOk = true; public stat...原创 2019-04-25 14:03:28 · 520 阅读 · 1 评论 -
volatile(三) 有序性
1.什么是有序性 程序按照写代码的先后顺序执行,就是有序的。程序难道还能不按代码顺序执行?这就涉及到CPU的指令重排序问题。 2.指令重排 处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证程序中各个语句的执行先后顺序同代码中的顺序一致,但是它会保证程序最终执行结果和代码顺序执行的结果是一致的。那它如何保证即使重排最终结果也能正确呢? 答案就是保证指令数据间依赖关系不会被重排所影响。看...原创 2019-04-25 14:44:41 · 584 阅读 · 0 评论 -
volatile(四) 不具有原子性
这个 volatile 不具有原子性,这个我们改怎么测试才能说明问题呢? 目前先设计下面的方案吧,以后再有好的方案,我在更新文章 实验设计 10个线程,每个线程都对 volatile修饰的count进行++操作10000次 实验假设 假设一: 如果 volatile 修饰的 count++ 具有原子性 预期结果:为10*10000 = 100000; 假设二: 如果 volatil...原创 2019-04-25 15:15:17 · 271 阅读 · 0 评论