java 并发
文章平均质量分 83
时空恋旅人
坚持不懈的学习态度和坚韧的人生品质
展开
-
并发包中的原子类
跟着这个错误我们可以找到,当加载我们自定义的这个类的时候,使用的是我们的应用程序类加载器AppClassLoador。看完这个例子之后我们再来总结一下CAS算法,就是通过变量在实例中的内存偏移量拿到这个变量在内存中此时此刻的值,如果与之前拿到这个变量的旧值相等,说明没有线程对他做修改,可以修改成我们期待的新值。我一开始想的是使用引导类加载器来加载自定义的这个类,利用类加载的传到规则不就可以使用启动类来加载这个Unsafe类吗,但是试了几次没有成功,换一种方式,利用反射,利用反射去获得这个实例。...原创 2022-08-28 18:14:05 · 269 阅读 · 1 评论 -
多线程下使用随机数ThreadLocalRandom
用CAS把老的种子替换为新的种子,这样做以后,在竞争比较激烈的环境下,会造成大量的线程自旋,消耗CPU,因为每次CAS操作只能有一个线程能成功。读取/dev/random会阻塞的原因,是因为/dev/random中的数据来自系统的扰动, 比如键盘输入, 鼠标点击, 等等, 当系统扰动很小时, 产生的随机数不够, 导致读取/dev/random的进程会阻塞等待.Random是我们使用随机数的常用的一个类,他的原理四是根据一个老的种子生成新的种子,再根据新的种子去生成随机数。放到linux上运行就卡住了。原创 2022-08-24 23:39:03 · 1106 阅读 · 0 评论 -
java并发编程--09(多线程编程的最佳实践)
1.使用本地变量(局部变量) 应该尽量的使用本地变量,而不是创建一个类或者实例的形式2.使用不可变类 比如String类,它可以降低代码中同步数量3.最小化锁的作用域范围 安达尔定理 简单来说就是被锁起来的代码越少越好4.使用线程池Executor,而不是直接使用new Thread()5.宁可使用同步,也不要使用线程的wait和notify...原创 2019-12-09 22:16:50 · 168 阅读 · 0 评论 -
java并发编程--08(线程池)
1.直接使用Thread的弊端2.线程池的好处3.线程池ThreadPoolExecutor ThreadPoolExecutor类的一些重要属性4.线程池实例的状态 每个状态能做什么样的事情ThreadPoolExecutor类的一些重要的方法: 监控的方法:5.线程池的类图 6...原创 2019-12-08 14:22:56 · 131 阅读 · 0 评论 -
java并发编程--07(JUC组件扩展)
1.Callable与Future Callable与Runnable类似,只不过有返回值。 Future保存异步计算的结果, Callable与Future的使用public class Test8 { static class MyCallable implements Callable<String>...原创 2019-12-08 00:18:42 · 125 阅读 · 0 评论 -
java并发编程--06(java中的锁)
1.ReentrantLock与synchronized的区别1.可重入性 两个都可以重入,区别不大2.锁的实现 synchronized依赖于JVM来实现,而ReentrantLock依赖于JDK来实现,类似于操作系统来实现和用户自己敲代码实现的区别3.性能 自从synchronized引入偏向锁,自旋锁以后,两者的性能差不多,两中方法都可以用...原创 2019-12-08 00:18:35 · 86 阅读 · 0 评论 -
java并发编程--05(AQS)
1.什么是AQS? 并发容器里面的同步器 AQS使用Node实现FIFO队列,可以构建其他的锁或者同步装置的基础框架,AQS其实就是一个可以给我们实现锁的框架。 内部实现的关键是:先进先出的队列(CLH队列(三个名字组成),是一个双向队列)、int类型的state表示状态。 使用方式是继承,子类实现方法(acquire,release)来管理他的状态。 定...原创 2019-12-08 00:18:17 · 136 阅读 · 0 评论 -
java并发编程--03(Java中的并发工具类)
1.CountDownLatch CountDownLatch允许一个或多个线程等待其他的线程完成操作。 例子:public class Test6 { private final static int COUNT = 100; public static void main(String[] ...原创 2019-11-26 19:27:54 · 100 阅读 · 0 评论 -
java并发编程--04(安全发布对象与不可变对象和线程封闭)
目录1.发布对象2.不安全的发布对象3.四种安全发布对象的方法4.不可变对象5.线程封闭6.线程不安全类的写法1.发布对象 发布对象:使一个对象能够被当前范围之外的代码所使用 对象溢出:一种错误的发布,当一个对象还没有构造完成就使他被其他线程所见。2.不安全的发布对象 下面给出一个不安全发布对象的例子:public clas...原创 2019-11-23 17:39:35 · 172 阅读 · 0 评论 -
java并发编程--02(原子性)
目录1.线程安全性2.java中的原子类3.理解CAS的操作:4.原子操作类的基本API5.CAS6.LongAdder性能比AtomicLong要好7.用锁来保证原子性8.java中原子性的对比9.并发的模拟工具1.线程安全性 线程安全性有三个重要的点:原子性,可见性,有序性,这里里我们重点来看原子性 先来看一个线程不安全的案...原创 2019-11-10 16:58:20 · 203 阅读 · 0 评论 -
java并发编程--01(CPU缓存,Java内存模型)
目录1.CPU缓存 2.java内存模型3.java并发的优势与风险知识点结构1.CPU缓存 1为什么需要CPU cache? CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源,所 以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu->cache->...原创 2019-11-02 18:07:11 · 247 阅读 · 0 评论 -
Java并发编程75道面试题及答案——稳了
版权声明:非商业用途的欢迎转载 https://blog.csdn.net/qq_34039315/article/details/78549311 </div> <div id="content_views" class="markdown_views"> <!-- flow...转载 2019-01-03 17:27:33 · 1389 阅读 · 0 评论