
多线程
SiriusQiu
纸质阅读成瘾
展开
-
java多线程开发09——线程通信
java多线程开发09——线程通信wait方法wait()方法就是使线程停止运行,会释放对象锁。wait()方法会使当前线程调用该方法后进行阻塞,并且将该线程置入锁对象的等待队列中,直到接到通知notify或被中断interrupt为止。wait()方法只能在同步方法或同步代码块中调用,如果调用wait()时没有适当的锁,会抛出异常。wait()方法执行后,当前线程释放锁,其他线程可以竞争该锁。wait()方法被中断或者notify后,不会立刻获取锁,需要重新竞争notif原创 2020-07-26 22:12:37 · 136 阅读 · 0 评论 -
java多线程开发08——中断interrupt
java多线程开发-8——中断interrupt有三个方法和中断有关:public void interrupt():线程对象的成员方法,调用此方法,可以向线程内发送中断信号,有一些原生方法可以捕捉中断信号从而抛出被中断异常InterruptException,同时会线程内的中断标志会变成true。public static boolean interrupted():Thread的静态方法,调用此方法,可以查看当前线程是否被中断,即查看中断标志,需要说明的是,标志为true时,调用一次会自动把标志原创 2020-07-26 21:51:17 · 168 阅读 · 0 评论 -
java多线程开发07——final
java多线程开发07——final对final域,编译器和处理器要遵守两个重排序规则。在构造器函数内对一个final域的写入,随后把这个被构造的对象赋值给引用变量,两个操作不能重排序。即构造函数中对一个final域的写入构造完把对象赋值给引用变量初次读取一个包含final域的对象引用,随后初次读这个final域,两个操作不能重排序。即初次读取一个包含final域的对象引用初次读取这个final域...原创 2020-07-26 20:12:58 · 97 阅读 · 0 评论 -
java多线程开发06——锁和内存屏障
java多线程开发06——锁和内存屏障资源来自:原文链接锁概述我们知道线程安全问题的产生前提是多个线程并发访问共享变量、共享资源(以下统称为共享数据)。于是,我们很容易想到保障线程安全的方法将多个线程对共享数据的并发访问转换为串行访问,即一个共享数据一次只能被一个线程访问,该线程访问结束后其他线程才能对其进行访问。锁(Lock)就是利用这种思路以保障线程安全的线程同步机制。按照上述思路,锁可以理解为对共享数据进行保护的许可证。对于同一个许可证所保护的共享数据而言,任何线程访问这些共享数据前必须先持有转载 2020-07-26 19:22:55 · 541 阅读 · 1 评论 -
java多线程开发05——相对顺序问题
文章目录java多线程开发05——相对顺序问题顺序一致性as-if-serialhappens-before规则java多线程开发05——相对顺序问题程序员为了开发方便,希望写的程序可以按他们写的逻辑,一行一行执行。而处理器设计者,考虑到如果逐行执行,一方面效率低:每个变量写入和读取都从主存的话IO开销太大;一方面无法发挥多核处理器的优势:如果是一行一行串行执行指令只能在一个CPU上执行程序。因此,现代CPU每个处理器都有自己的读写缓存区,用以批量地更新变量。然后通过优化指令的手段,将指令代码在多个C原创 2020-07-25 15:01:07 · 211 阅读 · 0 评论 -
java多线程开发03——CAS
文章目录java多线程开发03——CASCAS 是怎么实现线程安全的?存在问题java多线程开发03——CAScas全称是Compare and Swap,即比较再交换,乐观锁的一种实现方式,是一种轻量级锁,JUC 中很多工具类的实现就是基于 CAS 的。CAS 是怎么实现线程安全的?线程在读取数据时不进行加锁,在准备写回数据时,先去查询原值,操作的时候比较原值是否修改,若未被其他线程修改则写回,若已被修改,则重新执行读取流程。比较+更新 整体是一个原子操作存在问题循环时间长CPU开销大:原创 2020-07-07 20:56:50 · 114 阅读 · 0 评论 -
java多线程开发04——内存模型
文章目录java多线程开发04——内存模型并发编程线程同步问题java内存模型重排序重排序和内存屏障java多线程开发04——内存模型并发编程线程同步即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态**临界区(线程维护):**通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后原创 2020-07-25 11:32:40 · 104 阅读 · 0 评论 -
java多线程开发02——synchronized
文章目录java多线程开发02——synchronizedsynchronized应用对象头偏向锁轻量级锁java多线程开发02——synchronized偏向锁、轻量级锁是JVM级别实现的重量级锁是操作系统级别实现的JUC是JDK级别实现的synchronized应用对于普通方法,锁是当前实例对象对于静态同步方法,锁是当前类的Class对象对于同步方法块,锁是Syschronized括号里配置的对象对象头锁的状态通过java对象头进行区分。syschronized用的锁是存原创 2020-07-07 20:56:05 · 176 阅读 · 0 评论 -
java多线程开发01——volatile
文章目录java多线程开发01——volatilevolatile可见性禁止指令重排序java多线程开发01——volatilevolatile一但一个共享变量(类成员变量,类静态成员变量) 被volatile修饰后那么就具备了以下两层语义(1)保证不同线程对其的可见性,即不同线程修改该变量,新值对于其他线程是立即可见的。(2)禁止指令重排序。可见性所谓可见性,是指某个线程对volatile修饰的变量进行修改,其他线程可见修改后的内容。基于以下两点实现这个功能:将当前处理器缓存行的数据写回原创 2020-07-04 21:04:59 · 156 阅读 · 0 评论