
多线程、并发库
文章平均质量分 92
恒奇恒毅
Javaer
展开
-
J.U.C:线程基本概念
线程基本概念原创 2022-06-08 20:26:28 · 280 阅读 · 0 评论 -
ThreadLocal
感谢传智播客老师深入细致的讲解ThreadLocal1. ThreadLocal介绍1.1 官方介绍/** * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thread that accesses one (via its * {@code get} or {@code set} method) has its转载 2021-05-19 18:33:17 · 241 阅读 · 0 评论 -
volatile关键字详解
感谢传智播客老师的深入细致讲解一volatile关键字1.1. 多线程下变量的不可见性 1.1.1 概述 在多线程并发执行下,多个线程修改共享的成员变量,会出现一个线程修改了共享变量的值后,另一个线程不能直接看到该线程修改后的变量的最新值。 1.1.2 案例演示 public class MyThread extends Thread { // 定义成员变量 private boolean flag = false ; public boolean...原创 2021-05-14 17:17:47 · 146 阅读 · 0 评论 -
使用CompletableFuture异步同时执行多个耗时操作
在一个业务代码中,一个接口中需要调用10个接口来获取必要的数据,数据放置于一个Map返回。伪代码如下:Map<String,Object> result = new HashMap<>();method01(result,params01);method02(result,params02);method03(result,params03);method04(result,params04);method05(result,params05);method0原创 2020-08-26 10:46:19 · 4407 阅读 · 3 评论 -
wait、notify、join和保护性暂停模式
wait和notify是Object的方法,前者用于让运行的线程阻塞进入TIMED_WAITING模式,后者用于通知相同锁对象阻塞的线程继续运行。一般地使用模式为:Object lock = new Object();function1(){ syncronized(lock){ while(条件不满足){ lock.wait(); } TODO other things... }}function2(原创 2020-07-18 21:46:15 · 317 阅读 · 0 评论 -
如何优雅地保证程序不退出?
首先提两个问题:springboot应用程序只在main方法中调用SpringApplication.run(xx),程序就运行起来了,他为什么能保持住不退出? quartz程序为什么能一直运行不退出?我们为了让程序保持不退出,一般使用Thread.sleep方法,或者使用一个while无限循环,但是总感觉不太优雅。参考springboot和tomcat的源码写了一个小工具,可以优雅地实现...原创 2019-11-01 09:39:55 · 1566 阅读 · 0 评论 -
Java并发库(九、十):线程池、Callable、Future
09.java5线程并发库的应用 如果没有线程池,需要在run方法中不停判断,还有没有任务需要执行 线程池的通俗比喻:接待客户,为每个客户都安排一个工作人员,接待完成后该工作人员就废掉。服务器每收到一个客户请求就为其分配一个线程提供服务,服务结束后销毁线程,不断创建、销毁线程,影响性能。 线程池:先创建多个线程放在线程池中,当有任务需要执行时,从线程转载 2015-12-25 10:04:36 · 738 阅读 · 0 评论 -
Java并发库(十三):Condition、几个线程有顺序地一个搞一会儿
13.java5条件阻塞Condition的应用 Condition的功能类似在传统线程技术中的Object.wait()和Object.natify()的功能,传统线程技术实现的互斥只能一个线程单独干,不能说这个线程干完了通知另一个线程来干,Condition就是解决这个问题的,实现线程间的通信。比如CPU让小弟做事,小弟说我先歇着并通知大哥,大哥就开始做事。public i转载 2015-12-25 10:11:09 · 377 阅读 · 0 评论 -
Java并发库(十一、十二):线程锁、读写锁
11.java5的线程锁技术java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,接口摘要ConditionCondition 将 Object 监视器方法(wait、notify 和notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Lock 实现组合使用,为每个对转载 2015-12-25 10:07:02 · 485 阅读 · 0 评论 -
Java并发库(八):java5原子性操作类的应用
08.java5原子性操作类的应用 Java5的线程并发库 java.util.concurrent在并发编程中很常用的实用工具类。 |----locks为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器 |----atomic类的小工具包,支持在单个变量上解除锁转载 2015-12-25 10:02:34 · 392 阅读 · 0 评论 -
Java并发库(五、六、七):线程范围内共享数据、ThreadLocal、共享数据的三种方法
05. 线程范围内共享变量的概念与作用线程范围内共享数据图解:代码演示:class ThreadScopeShareData{ 三个模块共享数据,主线程模块和AB模块 privatestatic int data = 0; 准备共享的数据 存放各个线程对应的数据 private Mapthread转载 2015-12-25 09:56:30 · 1474 阅读 · 0 评论 -
Java并发库(四):传统线程同步通信技术
04. 传统线程同步通信技术 面试题,子线程10次与主线程100次来回循环执行50次 下面是我刚看完面试题就暂停视频自己试着写的代码,还可以,结果完成要求了在单次循环结束后让这个刚结束循环的线程休眠,保证另一个线程可以抢到执行权。public class ThreadInterViewTest{ /** * 刚看到面试题转载 2015-12-25 09:53:59 · 485 阅读 · 0 评论 -
Java并发库(十四):控制线程访问数量Semaphore
14.java5的Semaphore同步工具 Semaphore可以维护当前访问自身的线程个数,并且提供了同步机制。 semaphore实现的功能类似于厕所里有5个坑,有10个人要上厕所,同时就只能有5个人占用,当5个人中 的任何一个让开后,其中在等待的另外5个人中又有一个可以占用了。java.util.concurrent.Semaphore一个计数信号量转载 2015-12-25 10:12:48 · 511 阅读 · 0 评论 -
Java并发库(十五):线程等待CyclicBarrier
15.java5的CyclicBarrier同步工具 例如:组织人员(线程)郊游,约定一个时间地点(路障),人员陆续到达地点,等所有人员全部到达,开始到公园各玩各的,再到约定时间去食堂吃饭,等所有人到齐开饭……java.util.concurrent.CyclicBarrier一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier p转载 2015-12-25 10:14:05 · 406 阅读 · 0 评论 -
Java并发库(十六):线程等待CountDownLatch
16.java5的CountDownLatch同步工具 好像倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当到达0时,所有等待者就开始执行。 举例:多个运动员等待裁判命令: 裁判等所有运动员到齐后发布结果代码示例:ExecutorService service =Executors.newCachedThre转载 2015-12-25 10:15:43 · 353 阅读 · 0 评论 -
Java并发库(十七):线程交换Exchanger
17.java5的Exchanger同步工具 用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人会一直等待第二个人,直到第二个人拿着数据到来时,才能彼此交换数据。举例:毒品交易 双方并不是同时到达,有先有后,只有都到达了,瞬间交换数据,各自飞代码演示:ExecutorService service =Executors.new转载 2015-12-25 10:16:26 · 347 阅读 · 0 评论 -
Java并发库(十八):阻塞队列
18.java5阻塞队列的应用 队列包含固定长度的队列和不固定长度的队列,先进先出固定长度的队列往里放数据,如果放满了还要放,阻塞式队列就会等待,直到有数据取出,空出位置后才继续放;非阻塞式队列不能等待就只能报错了。 讲Condition时提到了阻塞队列的原理,Java中已经实现了阻塞队列ArrayBlockingQueueBlockingQueue转载 2015-12-25 10:18:22 · 385 阅读 · 0 评论 -
Java并发库(十九):同步集合类的使用
19.java5同步集合类的应用 传统集合实现同步的问题 举了一个例子:Map集合线程不同步导致的问题。 解决办法:使用同步的Map集合 使用集合工具类中的方法将不同步的集合转为同步的Collections.synchronizedMap(newMap())这个方法返回一个同步的集合 publicstatic Map sy转载 2015-12-25 10:20:11 · 1409 阅读 · 0 评论 -
Java并发库(二):传统定时器技术回顾
02. 传统定时器技术回顾传统定时器的创建:直接使用定时器类Timer【轻松实现定时关机或者过多长时间关机】a、过多长时间后炸new Timer().schedule(TimerTask定时任务, Date time定的时间);b、过多长时间后炸,以后每隔多少时间再炸newTimer().schedule(TimerTask定时任务, Long延迟(第一次执行)时间, Long转载 2015-12-25 09:47:00 · 474 阅读 · 0 评论 -
Java并发库(一):传统线程技术回顾
深切怀念传智播客张孝祥老师,特将其代表作——Java并发库视频研读两遍,受益颇丰,记以后阅01. 传统线程技术回顾传统是相对于JDK1.5而言的 传统线程技术与JDK1.5的线程并发库 线程就是程序的一条执行线索/线路。创建线程的两种传统方式1.创建Thread的子类,覆盖其中的run方法,运行这个子类的start方法即可开启线程转载 2015-12-25 09:41:53 · 404 阅读 · 1 评论 -
Java并发库(三):传统线程互斥技术
03. 传统线程互斥技术 线程安全问题例子:银行转账 同一个账户一边进行出账操作(自己交学费),另一边进行入账操作(别人给自己付款),线程不同步带来的安全问题示例:逐个字符的方式打印字符串class Outputer{ public void output(String name) { int len =n转载 2015-12-25 09:48:50 · 556 阅读 · 1 评论 -
一个折腾很久的支付宝支付的问题【多线程问题】
/** * call alipay sdk pay. 调用SDK支付 * */ public void pay(View v) { final String payInfo = Service.service.getAlipayRequest(); Toast.makeText(PayDemoActivity.this, payInfo, Toast.LENGTH原创 2016-05-24 19:16:23 · 4491 阅读 · 0 评论