多线程
柠檬丶Ewing
以输出倒逼输入
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CompletableFuture在Groovy中的应用
在前一篇博客中介绍了多线程在Groovy中的应用,发现Future获取结果的时候会阻塞,不能做到真正意义上的异步编程,之后再整理对应的原理解析篇,这里就先贴它的使用方式,因为公司代码不方便贴出来,所以贴了个简单的示例代码。 import java.util.stream.Collectors import java.util.concurrent.TimeUnit; import java.util.concurrent.Callable; import java.util.concurrent.Execu原创 2020-12-05 14:08:53 · 498 阅读 · 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 · 2753 阅读 · 1 评论 -
面试题:线程A打印1-10数字,打印到第5个数字时,通知线程B
关于线程通信这块,一直处于一知半解的状态,没有进行系统全面的学习,看了前辈的博客后,按照自己的理解自己手敲了一遍,写篇博客记录一下,方便自己以后查阅复习。 park/unpark volatile关键字 synchronized + wait/notify countdownlatch condition + await/signal 1 park/unpark package com.exa...原创 2020-01-07 11:09:05 · 758 阅读 · 0 评论 -
写时复制CopyOnWrite
juc包中有两个关于写时复制的类 CopyOnWriteArrayList CopyOnWriteArraySet 概念:顾名思义,写的时候,对数组进行复制。 适用场景:读多写少,大多数线程都是读请求,可以显著提高线程操作的效率,在读请求明显多于写请求的场景下,用于替换读写锁。 1 CopyOnWriteArrayList部分源码 数组是用volatile进行修饰的,关于volatile的相关...原创 2019-12-13 11:25:54 · 196 阅读 · 0 评论 -
多线程之锁原理及AQS
停车位的场景 Locks包 AQS抽象队列同步器 1 停车位的场景 2 Locks包 Locks包层次结构 Lock接口 ReentrantLock ReadWriteLock synchronized vs Lock 2.4 ReadWriteLock 概念 维护一对关联锁,一个只用于读操作,一个只用于写操作; 读锁可以有多个读线程同时持有,写锁是排他的。同一时间,两把锁不能被不同线...原创 2019-12-13 10:28:52 · 328 阅读 · 0 评论 -
线程中止
不正确的线程中止 - stop 正确的线程中止 - interrupt 正确的线程中止 - 标志位 1 不正确的线程中止 - stop Stop:中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不建议用。 Destory:JDK未实现该方法。 public class Demo{ public static void main(String[] args) throws I...原创 2019-12-07 18:00:33 · 174 阅读 · 0 评论 -
线程安全之原子性
线程安全及共享资源 原子操作 CAS 1 线程安全及共享资源 1.1 线程安全 竞态条件:如果程序运行顺序的改变会影响最终结果,就说存在竞态条件。 大多数竞态条件的本质,就是基于某种可能失效的观察结果来做出判断或执行某个计算。 临界区:存在竞态条件的代码区叫临界区。 1.2 共享资源 只有当多个线程更新共享资源时,才会发生竞态条件,可能会出现线程安全问题。 栈封闭时,不会在线程之间...原创 2019-11-30 14:37:44 · 221 阅读 · 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 · 259 阅读 · 0 评论 -
多线程并发编程之Java锁相关
1 Java中锁的概念 独享锁:写锁,获得锁的线程可以修改资源,其它线程不能加锁。 共享锁:读锁,获得锁的线程只读不写,其它线程可以加读锁,不能加写锁。 乐观锁:假定没有发生冲突,如果获取的数据与之前的数据不一致,则读取最新数据;乐观锁一般会采用版本号机制或CAS算法实现。 悲观锁:假定会发生冲突,一开始就不信任对方,从读数据开始就上锁,所有对数据的操作都进行同步。Synchronized和...原创 2019-11-15 14:02:40 · 186 阅读 · 0 评论 -
多线程并发编程之线程池应用及实现原理剖析
为什么要用线程池 线程池原理 线程池API 1 为什么要用线程池 线程在jvm中是一个对象,更是操作系统的资源,线程创建或销毁都伴随开销,如果创建时间+销毁时间>执行时间,就会不合理 对象是占用堆空间,操作系统线程占用系统资源,根据java虚拟机规范,一个线程默认允许占用的最大栈空间为1M,而栈空间是从系统内存分配的,如果开辟的线程太多,将会消耗大量内存 操作系统需要频繁切换线程上下文...原创 2019-11-13 14:24:43 · 258 阅读 · 0 评论
分享