随笔分类 - Java多线程
摘要:1:强软弱虚引用 这四种类型的引用使用强度依次递减的。 强:最强的引用类型,当前仅当该类型主动释放对象空间,即赋值为null的时候,才会进行垃圾回收。只要该引用保留对象,则如果GC怎么申请都是不会回收的。 软:次于强,当GC回收时,如果内存空间已满,不够用了,则会对该类型进行回收。 弱:只要GC回收
阅读全文
摘要:1:类介绍 在jdk里面提供的原子操作类有4中类型分别是针对原子更新基本类型如Integer,Boolean,Long类型,原子更新数组如AtomicIntegerArray,AtomicLongArray和AtomicReferenceArray对应的是整形数组,长整型数据以及引用数组,还有原子更
阅读全文
摘要:1:测试分析 如上图JMM模型中,我们直到线程有自己的内存空间,而当线程1修改了自己本地的内存空间的变量后,未能及时将变量写回主存,则回导致线程2无法获取最新的变量值,而造成脏读。我们解决的方法就是使用volatile关键字修饰这个变量,使得这个变量有可见性。但是在不使用该变量情况下一定回出现我们说
阅读全文
摘要:1:AQS设计思想 一言以蔽之,AQS的设计思想就是,获取同步资源的成功的线程能够继续运行,而获取同步资源失败的线程要进去等待队列去等待。 1.1:内部节点类介绍 static final class Node { /** Marker to indicate a node is waiting i
阅读全文
摘要:除了long和double之外的基本类型的赋值操作,因为long和double类型是64位的,所以它们的操作在32位机器上不算原子操作,而在64位的机器上是原子操作。 所有引用reference的赋值操作 java.concurrent.Atomic *包中所有类的原子操作
阅读全文
摘要:1:设计原理 1.1:循环等待法 锁的作用是什么?就是使多线程同步执行,避免异步出现的脏读错误。从这个角度出发我们可以很自然的象到该如何设计一个锁尼? 我们可以这样设计,当有两个线程要访问待同步的代码块时,我们将该同步代码块的使用权交给第一个访问的线程,使其能够顺利运行,而在第一个线程没有结束使用的
阅读全文
摘要:1:运行过程 上图所示是两个线程WaitThread和NotifyThread线程的工作状态图,其中WaitThread线程和NotifyThread线程的功能逻辑如下;前者检查flag是否为false,如果符合要去,继续后续操作,如果不满足则继续在Object.wait等待。后者线程,在睡眠了一段
阅读全文
摘要:1:方法介绍 suspend():暂停任务 resume():恢复任务 stop():停止任务 不推荐在使用这三个方法已suspend方法为例,在调用后,线程不会释放已经占有的资源比如锁,而是带着资源进入睡眠状态,十分容易引发死锁。同样stop方法在终结一个线程时,不能保证线程资源的正常释放,通常灭
阅读全文
摘要:1:Thread.init()方法学习 /** * Initializes a Thread. * * @param g the Thread group * @param target the object whose run() method gets called * @param name
阅读全文
摘要:1:状态分类 2:状态分析 NEW A thread that has not yet started is in this state. 一个被创建的线程,但是还没有调用start方法 RUNNABLE A thread executing in the Java virtual machine
阅读全文
摘要:1:定义和原理 volatile是轻量级的synchronized,在处理器中保证了共享变量的“可见性”,意味着,当一个线程改变了该共享变量时,其他线程能立马读到这个更改过后的共享变量值。该关键字的执行效率和代码比关键字synchronized的代价更低,这是因为volatile不会引起线程上下文的
阅读全文
摘要:1:同步容器类 1.1:Hashtable简单说明 public class Main { static Hashtable ht = new Hashtable(); public static void main(String[] args){ ht.put(0,0); ht.put(1,1);
阅读全文
摘要:1:线程封闭技术概述 如果数据和对象被封闭在一个线程中,就不会产生需要同步的问题,因为不会有其他线程访问这些数据和对象。这也是最简单的实现线程安全的方法之一。就在在Java语言中并没有强制规定变量必须由锁保护,也同样没有提供强制将对象封闭在某个线程中的方式。如何实现线程封闭是程序设计要考虑的,在Ja
阅读全文
摘要:非volatile类型的64位数值变量,在JVM的内存模型中写入和读出都是原子操作,但是64位的long和double类型变量在JVM的内存模型中,是将64位的操作拆分乘2个32位的操作。当取出一个非volatile类型的long或者double变量时,如果有一个读线程和一个写线程,那么读线程有可能
阅读全文

浙公网安备 33010602011771号