Java并发、多线程、锁
Java并发、多线程、锁
真理剑客
认知你自己
展开
-
1、并发基础
并行与并发 并发(Concurrency)是说进程B的开始时间是在进程A的开始时间与结束时间之间,我们就说A和B是并发的。 并行(Parallel Execution)是并发的真子集,指同一时间两个进程运行在不同的机器上或者同一个机器不同的核心上。 1、线程安全: 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步或者在调用方法进行任何其他的协调操...原创 2019-05-17 19:36:35 · 281 阅读 · 0 评论 -
2 Java线程
线程共包括以下5种状态。 新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。 线程只能从就绪状态进入到运行状态,处于就绪状态的线程,随...原创 2019-05-17 19:48:16 · 201 阅读 · 0 评论 -
3、volatile的实现原理
讨论线程安全,需要线程之间存在共享数据访问这个前提。 操作共享的 数据 可以分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容、线程对立。 不可变 不可变的对象一定是线程安全的。对象的方法实现或方法的调用者都不用再采取任何额外的措施。 基本数据类型,只要加上final关键字就可以保证不可变。 如果是对象,则需要保证对象的行为不会对其属性产生影响。如String、Long、Double、Bi...原创 2019-05-17 19:43:07 · 396 阅读 · 0 评论 -
3、Java内存模型(JMM)
Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。 JMM决定一个线程对共享变量的写入何时对另一个线程可见:并发BUG的源头是可见性、原子性、顺序性,要解决这些问题合理的办法就是 按需禁用缓存和重排序,而JMM则规范了JVM如何提供按需禁用缓存和编译优化的方法,包括 volatile、synchronized 和 final三...原创 2020-03-17 07:47:04 · 211 阅读 · 0 评论 -
4、synchronized的底层实现原理
在并发编程时,如果希望通过多线程执行任务让程序运行的更快,会面临非常多的挑战。 1、上下文切换 CPU通过时间片分配算法来循环执行任务,CPU时间片一般几十毫秒(ms)。在切换至下一个任务前会保存上一个任务的状态。从保存A任务到加载B任务的过程就是一次上下文切换。 linux系统可以使用vmstat监控 线程切换频率。 如何减少上下文切换 无锁并发:多线程竞争锁,会引起上下文切换。 将数据ID按H...原创 2019-05-17 19:50:59 · 257 阅读 · 0 评论