
Java多线程
非ban必选
黑,真他妈的黑
展开
-
java多线程同时执行和按顺序执行
java多线程同时执行和按顺序执行。原创 2022-07-27 09:24:24 · 422 阅读 · 0 评论 -
java中Fork-Join框架
一、使用场景 大任务拆解成多个子任务,子任务还可以继续拆解成更小的子任务,最后将这些最小的子任务用多个线程并行执行,然后合并执行结果,例如,对超过1000万个元素的数组进行排序。需求:有一个大数据量的用户List,根据其部门id,设置部门名称。ForkJoin模型利用了分治算法的思想,将大任务不断拆解,多线程执行,最后合并结果。它的本质是一个线程池。每一个工作线程维护一个本地的双端队列用来存放任务。线程在运行的过程中产生新的任务(通常是因为调用了 fork())时,会放入工作队列的队尾,并且原创 2022-07-12 09:49:26 · 251 阅读 · 0 评论 -
Java之parallelStream和stream
1、parallelStream是线程不安全的多线程并发操作可以通过代码验证如下googel的guava框架guava创建线程不安全的集合代码如下guava创建线程安全的集合代码如下原创 2022-07-08 17:17:36 · 731 阅读 · 0 评论 -
Redisson可重入锁
package com.example.demo.util;import org.redisson.Redisson;import org.redisson.api.RLock;import org.redisson.api.RedissonClient;import org.redisson.config.Config;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.原创 2022-04-29 15:45:54 · 626 阅读 · 0 评论 -
guava多线程回调
pom <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0</version> </dependency>线程类packag原创 2021-09-30 16:52:33 · 257 阅读 · 0 评论 -
CompletionStage接口方法说明
一、根据阶段正常完成结果的产出型(或者叫函数型):这一类方法都由上一阶段(或者两个阶段,或者两个阶段中的任意一个)的正常完成结果触发,然后以该结果执行给定的函数,产出新的结果。这里把异步执行的两者形式也列举出来了。//依赖单个阶段public <U> CompletionStage<U> thenApply(Function<? super T,? extends U> fn); // 默认执行方式public <U> Completio原创 2020-07-28 15:44:53 · 878 阅读 · 0 评论 -
CompletableFuture详解
CompletableFuture 的核心优势用 CompletableFuture 实现烧水泡茶程序。首先还是需要先完成分工方案,在下面的程序中,我们分了 3 个任务:任务 1 负责洗水壶、烧开水,任务 2 负责洗茶壶、洗茶杯和拿茶叶,任务 3 负责泡茶。其中任务 3 要等待任务 1 和任务 2 都完成后才能开始。烧水泡茶分工方案// 任务 1:洗水壶 -> 烧开水CompletableFuture<Void> f1 = CompletableFuture.runAs原创 2020-07-17 16:06:10 · 330 阅读 · 0 评论 -
CompletableFuture
package com.redisson;import java.util.concurrent.CompletableFuture;/** * @Description TODO * @Date 2020/7/17 15:02 * @Author zsj */public class MainOne { public static void main(String[] args) throws Exception { // 创建异步执行任务: C.原创 2020-07-17 15:27:00 · 240 阅读 · 0 评论 -
Guava之ListenableFuture使用
传统JDK中的Future通过异步的方式计算返回结果:在多线程运算中可能或者可能在没有结束返回结果,Future是运行中的多线程的一个引用句柄,确保在服务执行返回一个Result。ListenableFuture可以允许你注册回调方法(callbacks),在运算(多线程执行)完成的时候进行调用, 或者在运算(多线程执行)完成后立即执行。这样简单的改进,使得可以明显的支持更多的操作,这样的功能在JDK concurrent中的Future是不支持的。ListenableFuture中的基础方法是..原创 2020-07-02 09:45:59 · 722 阅读 · 0 评论 -
Future
package com.redisson;import org.redisson.Redisson;import org.redisson.api.RedissonClient;import org.redisson.config.Config;import java.util.concurrent.*;/** * @Description TODO * @Date 2020/6/30 10:29 * @Author zsj */public class RedissonTest.原创 2020-07-01 10:58:55 · 297 阅读 · 1 评论 -
解决服务器重启后Redisson的delayQueue take数据会阻塞
1、场景描述如下服务器重启后,延迟队列take数据阻塞,不执行,必须等到下一个内容offer时,队列才会把阻塞的消息全部处理掉2、解决方案初始化程序时,再次调用延时队列的getDelayedQueue方法RDelayedQueue<String> delayedQueue = redissonClient.getDelayedQueue(blockingQueue)...原创 2020-03-31 15:39:36 · 2960 阅读 · 1 评论 -
java Str转BCD码
string转BCD码 public static byte[] str2Bcd(String asc) { int len = asc.length(); int mod = len % 2; if (mod != 0) { asc = "0" + asc; len = asc.length...原创 2019-10-14 18:27:59 · 1254 阅读 · 0 评论 -
Java多线程处理ActiveMq消息
1、接收ActiveMq类/* */package com.roncoo.pay.app.queue;import java.util.Map;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Session;import com.roncoo.pay.app.queue.bankm...原创 2018-06-26 20:07:13 · 1495 阅读 · 1 评论 -
SpringBoot2多线程无法注入问题
1、情况描述使用springboot2多线程,线程类无法实现自动注入需要的bean,解决思路,通过工具类获取需要的bean如下package com.ps.uzkefu.apps.ctilink.handler;import com.baomidou.mybatisplus.mapper.EntityWrapper;import com.ps.uzkefu.apps.callcenter.e...原创 2018-07-09 09:20:53 · 4100 阅读 · 0 评论 -
Java多线程顺序执行
一直以为同步的时候只要锁住对象就能顺序执行了package com.ps.uzkefu.util;/** * Created by Administrator on 2018/6/28 0028. */public class Test { final static byte[] b = new byte[0]; Thread thread = new Thread(...原创 2018-06-28 21:59:05 · 1547 阅读 · 0 评论 -
多线程消费阻塞队列(生产者消费者模型)
一.几种主要的阻塞队列ArrayBlockingQueue:基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小。并且可以指定公平性与非公平性,默认情况下为非公平的,即不保证等待时间最长的队列最优先能够访问队列。LinkedBlockingQueue:基于链表实现的一个阻塞队列,在创建LinkedBlockingQueue对象时如果不指定容量大小,则默认大小...原创 2018-07-05 21:48:47 · 3475 阅读 · 1 评论 -
多线程事务回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(最近开发,有地方需要用到多线程,每个线程里面处理多个方法,过程中遇到了一个问题,我们使用平时的@Transactional注解,就是当前一个方法执行完成(比如插入操作),后一个方法是不会事务回滚的。当时觉得很不可思议,后来经过半天时间,终于挖出原因,并成功解...原创 2018-08-03 21:06:11 · 21140 阅读 · 20 评论 -
Java延时队列DelayQueue的使用
1、问题场景大家应该都打过客服的电话,当客服忙的时候,你的电话会进入到排队状态,当然不会让你一直排队,会有个排队的超时时间。嫁入在这个超时时间内没有客服空闲出来,就会提示你要不要继续等待。这就有个问题,程序是怎么知道你的电话等待超时了呢?这里就要用到延时队列了。2、DelayQueueDelayQueue 是 Delayed 元素的一个无界阻塞队列,只有在延迟期满时才能从中提取元素...原创 2018-08-31 18:08:31 · 5193 阅读 · 0 评论 -
使用线程池捕获线程异常
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked exception处理掉。这一点是通过java.lang.Runnable.run()方法声明(因为此方法声明上没有throw exception部分)进行了约束。但是线程依然有可能抛出...原创 2018-12-14 11:08:06 · 2708 阅读 · 0 评论 -
windows下安装consul
由于Eureka宣布闭源,选择consul作为微服务注册中心。consul下载地址https://www.consul.io/downloads.html下载完成后解压,在配置环境变量,计算机 右键 属性 高级属性设置环境变量设置 在path下加上consul的路径。cmd启动:consul agent -dev 启动成功打开网址:http://loc...原创 2018-12-22 16:38:04 · 322 阅读 · 1 评论 -
Java多线程Callable接口
Callable和Future出现的原因创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后...原创 2018-12-19 10:27:52 · 8253 阅读 · 0 评论 -
使用 ThreadPoolExecutor 创建线程池
使用 ThreadPoolExecutor 创建线程池源码分析 ,ThreadPoolExecutor的构造函数public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ...原创 2019-02-21 10:17:04 · 7163 阅读 · 0 评论 -
Java多线程CountDownLatch
简介CountDownLatch 允许一个或多个线程等待其他线程完成操作。应用场景假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。在这个需求中,要实现主线程等待所有线程完成sheet的解析操作,最简单的做法是使用join。代码如下:public class Jo...原创 2018-05-18 10:30:47 · 208 阅读 · 0 评论