![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
wang_nian
不以物喜 不以己悲 生于忧患 死于安乐
展开
-
死锁的原因、案例和ReentrantLock
死锁发生的四个必要条件虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件:互斥,共享资源 X 和 Y 只能被一个线程占用; 占有且等待,线程 T1 已经取得共享资源 X,在等待共享资源 Y 的时候,不释放共享资源 X; 不可抢占,其他线程不能强行抢占线程 T1 占有的资源; 循环等待,线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,就是循环等待。Java产生死锁的一个简单例子 思路是创建两个字符串.原创 2020-09-03 16:21:07 · 432 阅读 · 0 评论 -
创建线程的方式
Java中创建线程主要有四种方式,分别是:【a】直接通过继承Thread类,实现(重写)run()方法;【b】实现Runnable接口,实现run()方法;【c】通过实现Callable接口,实现call()方法,结合FutureTask创建线程;【d】通过线程池创建,主要使用ExecutorService、Executors等一、通过继承Thread方式* 说明:* 1. 调用start()方法启动线程,不要调用run(),调用run()相当于普通方法调用.* 2. ...原创 2020-10-10 19:58:02 · 190 阅读 · 0 评论 -
多线程之两阶段终止模式及interrupt详解
优雅的打断另一个线程,并让其料理后事interrupt能打断sleep、wait、join。注意:sleep被打断产生的异常(InterruptedException )会将打断标志设为false。package cn.itcast.test;import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "c.TwoPhaseTermination")public class Test13 { public static void main(原创 2020-10-17 15:44:28 · 376 阅读 · 0 评论 -
第一章--------java线程原理
一、原理之线程运行1、栈与栈帧 Java Virtual Machine Stacks (Java 虚拟机栈) 我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟机就会为其分配一块栈内存。 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。2、线程上下文切换(Thread Context Switch)因为以下一些原...原创 2020-10-15 21:21:50 · 187 阅读 · 0 评论 -
多线程之共享模型
一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区1、synchronized解决方案为了避免临界区的竞态条件发生,有多种手段可以达到目的。阻塞式的解决方案:synchronized,Lock非阻塞式的解决方案:原子变量本次课使用阻塞式的解决方案:synchronized,来解决上述问题,即俗称的【对象锁】,它采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住。这样就能保证拥有锁的线程可以安全的执行临界区内的代码,不用担心.原创 2020-10-17 21:53:56 · 324 阅读 · 0 评论