- 博客(6)
- 收藏
- 关注
原创 Java concurrent program - Java共享模型之不可变
1.不可变设计不可变:如果一个对象在不能够修改其内部状态(属性),那么它就是线程安全的,因为不存在并发修改。不可变设计的要素是final。比如String类是不可变的。该类、类中所有属性都是 final 的。属性用final修饰保证了该属性是只读的,不能修改。类用 final 修饰保证了该类中的方法不能被覆盖,防止子类无意间破坏不可变性。保护性拷贝:对不可变的对象进行修改可以采用保护性拷贝。这种通过创建副本对象来避免共享的手段称之为保护性拷贝(defensive copy)。2.享元模式享元模
2021-08-28 23:38:33 114
原创 Java concurrent program - Java无锁初探
1.CAS与volatilecompareAndSet,它的简称就是CAS。其原理如下:获取共享变量时,为了保证该变量的可见性,需要使用volatile修饰。它可以用来修饰成员变量和静态成员变量,他可以避免线程从自己的工作缓存中查找变量的值,必须到主存中获取它的值,线程操作volatile变量都是直接操作主存。即一个线程对 volatile 变量的修改,对另一个线程可见。volatile 仅仅保证了共享变量的可见性,让其它线程能够看到最新值,但不能解决指令交错问题(不能保证原子性)。CAS 必
2021-08-26 23:32:44 127
原创 Java concurrent program - 深入理解Java内存模型
1.Java内存模型Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM体现在以下几个方面:原子性:保证指令不会受到线程上下文切换的影响可见性:保证指令不会受CPU缓存的影响有序性:保证指令不会受CPU指令并行优化的影响2.可见性main线程对run变量的修改对于t线程不可见,导致了t线程无法停止:初始状态,t线程刚开始从主内存读取了run的值到工作内存。因为t线程要频繁从主内存中读取run的值
2021-08-18 23:47:49 118
原创 Java concurrent program - 深入理解Java管程
1.资源共享带来的问题临界区Critical Section一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区。在多个线程对共享资源读写操作时发生指令交错,就会出现问题。2.synchronized...
2021-08-18 00:23:59 166
原创 Java concurrent program - 进程与线程初探
1.进程与线程进程:进程就是用来加载指令、管理内存、管理 IO 的。进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等)。线程:一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行。二者对比:在windows中进程是不活动的,只是作为线程的容器。进程基本上相互独立的,而线程存在于进程内,是进程的一个子集。进程拥有共享的资源,如内存空间等,供其内部的线程共享。
2021-08-14 23:27:23 124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人