随笔分类 -  Java多线程

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