
Java并发编程
文章平均质量分 62
sun_lm
这个作者很懒,什么都没留下…
展开
-
四、死锁简介
死锁,是指多个线程在竞争锁资源时,由于获取不到锁,导致线程的执行流程无限期卡住的情况。例如以下代码,t1线程首先获取了lockA,t2线程获取了lockB;t1线程需要再获取lockB之后才能释放lockA,而t2线程又需要获取lockA之后才能释放lockB。这就导致两个线程各自持有了一把锁,都在等待获取对方持有的另一把锁,而且在获取到对方持有的锁之前,两个线程都不会释放自己已持有的锁。这就如同进入了一个死胡同,两个线程的执行流程就被无限期阻塞,也就是出现了死锁情况。 public class De.原创 2021-08-30 23:47:44 · 186 阅读 · 0 评论 -
二、volatile关键字
volatile是JVM中最轻量级的同步机制,当一个变量被定义为volatile变量之后,它将具备两个特性,一是保证此变量对所有线程的可见性,而是禁止指令重排序。 1、可见性 变量对所有线程的可见性指的是,当一个线程修改了这个变量的值,新的值对于其他线程来说是可以立即可见的,也就是其他线程再读取这个变量时,总是能读取到这个变量的最新值。而普通变量由于Java内存模型中线程的工作内存的存在,是做不到这点的。比如一个普通变量,线程A修改了它的值,线程B只有等待线程A将普通变量的值回写到主内存中之后,然后再从原创 2021-08-29 15:41:39 · 108 阅读 · 0 评论 -
一、Java内存模型
此处讨论的Java内存模型与Java虚拟机中的运行时内存区域不是从同一个角度讨论的,JVM运行区域是根据内存的功能和作用进行划分的,而Java内存模型是从多线程角度抽象出来的一个逻辑模型,不能将两者一一对应。 1、物理机的内存模型 由于存储设备和和处理器的的运算速度存在几个数量级的差距,因此,现代计算机系统中加入了高速缓存来解决这个问题:将需要用到的数据从内存中复制一份到高速缓存中,处理器从高速缓存中存取数据,再将计算后的数据从高速缓存中写回内存,这样就可以提高处理器存取数据的速度。 但是..原创 2021-08-29 13:36:42 · 105 阅读 · 0 评论 -
五、多线程基本知识
Java的多线程是学习过程的一个重点内容。学习多线程之前,首先需要弄清楚的是进程与线程的概念。 进程是操作系统分配资源(CPU、内存等)的基本单位,拥有自己的地址空间。当操作系统运行一个程序时,就相当于是启动了一个进程,会为它分配相应的资源。支持多任务的操作系统能够“同时”运行多个进程,这里的“同时”并不是真正意义上的同时,只是操作系统将时间进行了“分片”,使每个进程可以轮流获得运行时间,由于C...原创 2018-07-18 17:54:48 · 128 阅读 · 0 评论 -
三、synchronized关键字
一、同步 在多线程中,可能出现有两个甚至多个线程试图访问同一个资源的情况,此时,就可能导致资源冲突,引起线程安全的问题。一个经典的例子就是两个人同时对同一个银行账户分别进行存钱取钱的操作。 Java当中,为了使多个线程之间能够安全的共享资源,引入了同步(synchronized)的机制。 由于封装的特性,对象的属性一般都是private的,外部无法直接访问,而是通过对外公开的方法进行访问。为...原创 2018-07-23 22:11:01 · 310 阅读 · 0 评论