![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
柠檬丶Ewing
以输出倒逼输入
展开
-
CompletableFuture在Groovy中的应用
在前一篇博客中介绍了多线程在Groovy中的应用,发现Future获取结果的时候会阻塞,不能做到真正意义上的异步编程,之后再整理对应的原理解析篇,这里就先贴它的使用方式,因为公司代码不方便贴出来,所以贴了个简单的示例代码。import java.util.stream.Collectorsimport java.util.concurrent.TimeUnit;import java.util.concurrent.Callable;import java.util.concurrent.Execu原创 2020-12-05 14:08:53 · 344 阅读 · 0 评论 -
Groovy多线程样例
Groovy多线程以下代码是博主自己在平时工作中,使用groovy总结的一些多线程样例,博主作为多线程小白,很多东西都还在学习中,欢迎讨论指点~1. 必包操作StringBuffer demo = new StringBuffer();IntStream.range(0, 100).each { demo.append(it + " ");}return PluginResult.ok(demo.toString());2. 新建线程id = null;def thread =原创 2020-11-21 17:56:51 · 2340 阅读 · 1 评论 -
面试题:线程A打印1-10数字,打印到第5个数字时,通知线程B
关于线程通信这块,一直处于一知半解的状态,没有进行系统全面的学习,看了前辈的博客后,按照自己的理解自己手敲了一遍,写篇博客记录一下,方便自己以后查阅复习。park/unparkvolatile关键字synchronized + wait/notifycountdownlatchcondition + await/signal1 park/unparkpackage com.exa...原创 2020-01-07 11:09:05 · 697 阅读 · 0 评论 -
写时复制CopyOnWrite
juc包中有两个关于写时复制的类CopyOnWriteArrayListCopyOnWriteArraySet概念:顾名思义,写的时候,对数组进行复制。适用场景:读多写少,大多数线程都是读请求,可以显著提高线程操作的效率,在读请求明显多于写请求的场景下,用于替换读写锁。1 CopyOnWriteArrayList部分源码数组是用volatile进行修饰的,关于volatile的相关...原创 2019-12-13 11:25:54 · 141 阅读 · 0 评论 -
多线程之锁原理及AQS
停车位的场景Locks包AQS抽象队列同步器1 停车位的场景2 Locks包Locks包层次结构Lock接口ReentrantLockReadWriteLocksynchronized vs Lock2.4 ReadWriteLock概念维护一对关联锁,一个只用于读操作,一个只用于写操作;读锁可以有多个读线程同时持有,写锁是排他的。同一时间,两把锁不能被不同线...原创 2019-12-13 10:28:52 · 265 阅读 · 0 评论 -
线程中止
不正确的线程中止 - stop正确的线程中止 - interrupt正确的线程中止 - 标志位1 不正确的线程中止 - stopStop:中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不建议用。Destory:JDK未实现该方法。public class Demo{ public static void main(String[] args) throws I...原创 2019-12-07 18:00:33 · 125 阅读 · 0 评论 -
线程安全之原子性
线程安全及共享资源原子操作CAS1 线程安全及共享资源1.1 线程安全竞态条件:如果程序运行顺序的改变会影响最终结果,就说存在竞态条件。大多数竞态条件的本质,就是基于某种可能失效的观察结果来做出判断或执行某个计算。临界区:存在竞态条件的代码区叫临界区。1.2 共享资源只有当多个线程更新共享资源时,才会发生竞态条件,可能会出现线程安全问题。栈封闭时,不会在线程之间...原创 2019-11-30 14:37:44 · 162 阅读 · 0 评论 -
线程安全之可见性
1 Java内存模型 vs JVM运行时数据区Java内存模型 vs JVM运行时数据区工作内存缓存CPU指令重排JIT编译器1.1 Java内存模型 vs JVM运行时数据区定义定义Java语言规范Java内存模型JMMJVM规范JVM运行时数据区1.2 工作内存缓存每个线程都对应一个工作内存,对变量的修改都是在工作内存进行的存在内存屏障和CPU缓存Volatile关键...原创 2019-11-26 15:48:37 · 193 阅读 · 0 评论 -
多线程并发编程之Java锁相关
1 Java中锁的概念独享锁:写锁,获得锁的线程可以修改资源,其它线程不能加锁。共享锁:读锁,获得锁的线程只读不写,其它线程可以加读锁,不能加写锁。乐观锁:假定没有发生冲突,如果获取的数据与之前的数据不一致,则读取最新数据;乐观锁一般会采用版本号机制或CAS算法实现。悲观锁:假定会发生冲突,一开始就不信任对方,从读数据开始就上锁,所有对数据的操作都进行同步。Synchronized和...原创 2019-11-15 14:02:40 · 130 阅读 · 0 评论 -
多线程并发编程之线程池应用及实现原理剖析
为什么要用线程池线程池原理线程池API1 为什么要用线程池线程在jvm中是一个对象,更是操作系统的资源,线程创建或销毁都伴随开销,如果创建时间+销毁时间>执行时间,就会不合理对象是占用堆空间,操作系统线程占用系统资源,根据java虚拟机规范,一个线程默认允许占用的最大栈空间为1M,而栈空间是从系统内存分配的,如果开辟的线程太多,将会消耗大量内存操作系统需要频繁切换线程上下文...原创 2019-11-13 14:24:43 · 181 阅读 · 0 评论