随笔分类 - Java 并发
摘要:通常我们创建线程池有两种方式,一是通过ThreadPoolExecutor构造函数实现(推荐);二是通过Executor框架的工具类Executors来自行创建。本文主要分析ThreadPoolExecutor的执行原理,包括线程的创建、执行、销毁。在进行详细分析之前,先介绍一下ThreadPool
阅读全文
摘要:volatile关键字有两个作用,一是保证变量对所有线程可见,即一个线程修改了变量,其他线程马上就能得到新的值;二是禁止指令重排,编译器在生成字节码时,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序。 从Java内存模型看volatile 不同架构的物理机拥有不一样的内存模型。Java的宗旨
阅读全文
摘要:在执行程序时,为了提高性能,编译器和处理器会对指令重排序。重排序分为三种: 编译器优化的重排序。在不改变程序语义的前提下,可以改变执行顺序。如下: a = 1; b = 2; // 重排序后 > b = 2; a = 1; 指令级并行的重排序。如果不存在数据依赖性,处理器可以改变语句对应的机器指令的
阅读全文
摘要:基本介绍 synchronized关键字解决的是多个线程之间访问资源的同步性,它可以保证被它修饰的方法或者代码块在任意时刻只能由一个线程访问执行。synchronized可以修饰普通方法、静态方法、修饰代码块。 对于普通方法,锁的是当前实例对象 对于静态方法,锁的是当前类的Class对象 对于同步代
阅读全文