
多线程
文章平均质量分 71
沐谦
这个作者很懒,什么都没留下…
展开
-
condition源码分析及基于condition实现阻塞队列
condition源码分析及基于condition实现阻塞队列condition通过wait(),signal()实现线程间通信wait()signalcondition通过wait(),signal()实现线程间通信public class ContidionDemo { private List<String> bags = new ArrayList<>(); private Integer maxSize = 10; Lock lock = new原创 2021-06-14 21:47:49 · 356 阅读 · 0 评论 -
线程安全性之可见性和有序性
线程安全性之可见性和有序性什么是线程的可见性volatile解决可见性问题缓存一致性问题为提升性能,cpu所做的优化CPU层面上的缓存缓存一致性问题什么是线程的可见性在以下案例中,就是t1线程中用到了stop这个属性,接在在main线程中修改了 stop 这个属性的值来使得t1线程结束,但是t1线程并没有按照期望的结果执行。public class VolatileDemo01 { private static boolean stop = false; public static原创 2021-05-31 21:57:09 · 332 阅读 · 0 评论 -
并发编程中的原子性问题及Synchronized的基本原理
并发编程中的原子性问题及Synchronized的基本原理原子性问题问题的本质图解问题本质原子性问题在下面的案例中,演示了两个线程分别去去调用 object.add()方法来对 i 这个变量进行叠加,预期结果应该是20000,但是实际结果却是小于等于20000的值。public class ThreadTest04 { private int count= 0; public void add() { count++; } public static原创 2021-05-22 17:56:25 · 201 阅读 · 0 评论 -
深入浅出讲解java线程的运行状态
深入浅出讲解java线程的运行状态java线程的6种运行状态详细说明各个线程状态1、初始状态2、运行状态2.1就绪状态2.2 运行中状态3、阻塞状态4、等待状态5、超时等待6、终止状态通过代码验证线程的状态java线程的6种运行状态初始状态(new):新创建了一个线程对象,但还没有调用start()方法。运行状态(runnable):运行状态,JAVA线程把操作系统中的就绪和运行两种状态统一称为“运行中”。当线程对象创建成功后,当该对象的start方法被调度时,线程并不会立刻执行。而是进入一个就绪状原创 2021-05-20 21:46:52 · 649 阅读 · 0 评论 -
CountDownLatch的使用和源码分析
长夜漫漫,无处消遣,外面还下着雨,好吧。。。。不如写一篇技术博客。今天分享的技术博客主要是关于CountDownLatch的使用和源码分析。废话不多说,直接看下面:CountDownLatch的概述首先,CountDownLatch是一个工具类,它能够协调多个线程之间的同步。可以是一个线程等其他线程全部执行完毕之后再运行。其内部实现原理很简单,主要是依靠一个计数器来完成的,技术器的初始值可以在定义CountDownLatch的对象时通过构造方法定义。每当一个线程执行完之后,计数器的值就会减1。当计数原创 2021-04-18 21:33:33 · 94 阅读 · 0 评论 -
java并发编程之AQS
概述AQS 全称AbstractQueuedSynchronizer,其实就是一个抽象类。它定义了一套多线程访问共享资源的同步器框架。其实其内部主要是通过定义了一个共享资源(volate int state)和双向队列。当多线程抢夺共享资源时,如果没有抢占成功的线程就会被分配到双向队列中阻塞等待。通过源码分析AQS想向一个场景,当多线程同时竞争锁时,此时竞争到锁的线程继续执行,那么没有竞争到锁的线程不得不阻塞等待。那么在这里,其他线程阻塞,等待的逻辑时怎样的?这些被阻塞的线程又是如何被唤醒的呢?接原创 2021-04-17 22:59:20 · 202 阅读 · 0 评论 -
ThreadLocal的实际作用及实现原理
在多线程的情况下,我们有时需要访问同一个共享变量,并且对共享变量做某种操作。但是由于多线程的存在,不同线程间对同一个共享变量的操作可能会互相影响。可是在实际业务中,我们可能都需要对共享变量做初始操作,又不想互相影响,这个时候就需要一个机制,将多线程之间相互隔离。从而使得其他线程对该共享变量进行操作时,不会影响其他线程。例如以下代码,我们希望各个线程都对初始变量count做加10操作。如果使用多线程,代码如下:public class ThreadLocalWork extends Thread {原创 2021-04-12 23:05:48 · 206 阅读 · 0 评论 -
解决多线程死锁问题
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-03-29 11:22:18 · 791 阅读 · 0 评论