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