
java_concurrency
文章平均质量分 85
const伐伐
这个作者很懒,什么都没留下…
展开
-
java内存模型及常见的几种非原子性操作
文章目录java内存模型(JMM)1. 自增操作2. instance = new Singleton();3. y = x;java内存模型(JMM)java内存模型 (java memory model JMM)指定了java虚拟机如何与计算机的主存RAM进行工作(可以类比RAM和cpu L1 L2 L3高速缓存)java内存模型定义了线程和主内存之间的抽象关系线程不能直接操作主内存,只有先操作了工作内存之后才能写入主内存。工作内存和java内存模型一样也是一个抽象的概念,它其实并不存在,其原创 2021-02-26 17:25:28 · 606 阅读 · 0 评论 -
从0开始实现一个线程池(对标java jdk ThreadPoolExecutor)
关于线程池的基础知识,参考:java线程池ThreadPoolExecutor的原理及使用这篇文章从实现的角度来实现两个版本的线程池,并对比java jdk中的ThreadPoolExecutor,看一下与工业级线程池的差距。文章目录关于线程池的四个思考第一版线程池JDK线程池中的实现1:核心执行流程第二版线程池JDK线程池中的实现2:回收线程JDK线程池中的实现3:关闭线程池JDK线程池中的实现4:任务拒绝策略关于线程池的四个思考线程池刚刚创立,还没有Task到来的时候,池中的线程处于什么状态?原创 2021-02-26 16:20:40 · 281 阅读 · 1 评论 -
java8中CompletableFuture异步处理超时的方法
stackoverflow上有一个讨论:Timeout with default value in Java 8 CompletableFuture其中大家讨论了实现方案其中的一个解决方案:原文链接:Asynchronous Timeouts with CompletableFuture如何实现Asynchronous timeoutsJava 8 的 CompletableFuture 并没有 timeout 机制,虽然可以在 get 的时候指定 timeout,但是我们知道get 是一个同步翻译 2020-10-17 16:28:26 · 21059 阅读 · 1 评论 -
Callable、CompletionStage、DeferredResult、异步servlet使用对比
异步处理Restful请求有两个方案方案1:使用Callable异步处理Rest服务方案2:使用DeferredResult异步处理Rest服务Callable异步处理同步处理的问题tomcat thread有数量限制的,再有请求进来,就没办法处理了异步处理tomcat主线程调用一个副线程,副线程去执行具体逻辑,当副线程整个的处理逻辑完成之后,主线程再过来把结果返回回去,在副线程处理整个业务逻辑的过程中,主线程是可以空闲出来,可以处理其他请求的,使用这种方式服务器的吞吐量会得到很大的提升代原创 2020-09-23 14:11:43 · 832 阅读 · 0 评论 -
新建线程的异常处理
新建线程的异常处理由于线程的本质特性,使你不能捕获从线程中逃逸的异常。一旦异常逃出任务的run方法,它就会向外传播到控制台问题自然来了,如何捕捉子线程中的异常,使其不直接向外传播到控制台呢?解决方案1:实现ThreadFactory接口,在newThread方法中附加异常处理器。将这个工厂传递给Executors创建新的ExecutorService的方法,就设置了这个线程池专有的未捕获异常的处理器解决方案2:在Thread类中设置一个静态域,并将这个处理器设置为Thread类的默认的未捕获异常处理原创 2017-06-27 09:32:31 · 569 阅读 · 0 评论 -
java主线程结束和子线程结束之间的关系
情况1:正常情况下,主线程启动了子线程,主线程、子线程各自执行,彼此不受影响。(如评论所述,确实有问题,main线程执行完成之后,java虚拟机就退出了,那是不是可以这样猜想,main线程退出,那么Lift off thread也会退出,导致虚拟机中没有线程运行了,于是退出进程?请大神解释)当你在run一个Java application的时候,这个时候系统会开一个进程。然后这个进程启动了Ma...原创 2017-06-26 16:19:40 · 25793 阅读 · 11 评论 -
volatile关键字总结
volatile关键字内容总结volatile保证可视性volatile和synchronized的区别volatile不能解决“原子性操作但是仍需要同步控制”的问题原创 2017-06-27 18:50:44 · 390 阅读 · 0 评论 -
Thinking in java中装饰花园OrnamentGarden程序的学习
Thinking in java中装饰花园OrnamentGarden程序的学习原创 2017-06-28 10:35:16 · 283 阅读 · 1 评论 -
线程的生命周期
线程的生命周期原创 2015-04-08 09:30:16 · 388 阅读 · 0 评论 -
Synchronized与lock的对比
Synchronized与lock的对比为什么会出现Lock呢转载 2017-06-28 15:02:18 · 255 阅读 · 0 评论 -
ScheduledExecutorService启动一个线程定期执行某个Task
需求:有一个远程文件synonym.txt,要求使用ScheduledExecutorService启动一个线程定期执行读取这个远程文件的内容并将其内容解析到内存中的一个数据结构中,使得这个内存中的数据结构永远可用。远程txt的内容出租车,出租汽车;社保,社会保险;医保,医疗保险;参考elasticsearch-analysis-ik源码的写法,写了如下代码:SynonymD...原创 2018-08-31 09:46:41 · 1579 阅读 · 0 评论 -
java线程池ThreadPoolExecutor的原理及使用
示例代码:https://gitee.com/constfafa/imooc-zookeeper-starter下的threadpoolexecutor看《阿里巴巴java编程手册》并发处理部分,讲了两个原则:1. 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。使用线程池的好处是减少在创建和销毁线程上所消耗的时间及系统资源,解决资源不足的问题。如果不使用线程池,有可...原创 2018-08-28 18:04:52 · 8099 阅读 · 0 评论 -
Future不支持回调怎么办?使用CompletableFuture
示例代码:https://gitee.com/constfafa/imooc-zookeeper-starter下的searchcountdown package背景:spring boot web项目controller要调用同一个service下的4个服务目前采用的是串行方式String items = esService.searchQueryItems("xxx");S...原创 2019-03-06 18:23:11 · 945 阅读 · 0 评论 -
Java多线程ExecutorService.shutdown什么时候执行
Java多线程ExecutorService.shutdown什么时候执行转载 2016-02-11 20:22:50 · 4256 阅读 · 0 评论 -
Java多线程通过多核CPU来提升速度--更快的执行
全文翻译自15L大神 方案1:单线程假设有个请求,这个请求服务端的处理需要执行3个很缓慢的IO操作(比如数据库查询或文件查询),那么正常的顺序可能是(括号里面代表执行时间):a、读取文件1 (10ms)b、处理1的数据(1ms)c、读取文件2 (10ms)d、处理2的数据(1ms)e、读取文件3 (10ms)f、处理3的数据(1ms)g、整合1、2、3翻译 2016-02-11 19:58:29 · 16796 阅读 · 3 评论 -
Thinking in java 涂蜡抛光WaxOnWaxOff程序学习
Thinking in java 涂蜡抛光WaxOnWaxOff程序学习原创 2017-06-28 18:56:33 · 490 阅读 · 0 评论 -
使用BlockingQueue实现WaxOnWaxOff程序
使用BlockingQueue实现WaxOnWaxOff程序原创 2017-06-29 15:27:19 · 360 阅读 · 0 评论 -
使用观察者模式实现线程将计算结果回调给多个对象
《Java网络编程》在第三章线程中讲到了这样一个需求使用回调的方法从线程中返回信息给对象。例如,如果有多个对象对线程的计算结果感兴趣,那么线程可以保存一个要回调的对象列表。特定的对象可以通过调用线程类的一个方法把自己添加到这个列表中来完成注册,表示自己对计算结果很感兴趣。如果有多个类的实例对结果感兴趣,可以定义一个新的Observer interface (接口),所有这些类都要实现这个新...原创 2017-07-03 10:40:17 · 776 阅读 · 0 评论 -
使用GroboUtils多线程并发请求测试springmvc controller
使用GroboUtils多线程并发请求测试springmvc controller原创 2017-06-23 17:49:03 · 3504 阅读 · 0 评论 -
java模拟并发请求测试方法是否线程安全
java模拟并发请求测试方法是否线程安全原创 2017-06-19 16:36:54 · 6304 阅读 · 0 评论 -
主线程wait等待子线程返回对象信息
需求:假设一个线程(JarThread)正在从网络连接(用System.in模拟)中读取一个JAR归档文件。这个归档文件中第一项是清单文件(用‘/’标识结束)。另一个线程(MainThread)可能对这个清单文件的内容感兴趣,即使归档文件的其余部分尚不可用。对清单文件感兴趣的线程会创建一个定制的ManifestFile对象,将这个对象的引用传递给将要读取JAR归档文件的线程,并等待这个对象。读取归档文件的线程首先用流中的项填写ManifestFile,然后通知ManifestFile,再继续读取JAR归档文原创 2017-07-04 13:47:45 · 860 阅读 · 0 评论 -
Java基础第二十天--多线程1
多线程 创建线程的方式 线程的安全问题原创 2015-04-08 09:21:40 · 359 阅读 · 0 评论 -
Java基础第二十一天--多线程2
多线程总结2原创 2015-04-08 09:32:37 · 361 阅读 · 0 评论 -
两种实现多线程方法的源码图解
原创 2015-04-08 09:32:45 · 365 阅读 · 0 评论 -
将web服务器日志文件中的IP地址转换为主机名
将web服务器日志文件中的IP地址转换为主机名原创 2017-07-04 17:46:07 · 692 阅读 · 0 评论 -
多线程的应用场景
多线程的应用场景原创 2016-02-11 20:11:12 · 621 阅读 · 0 评论 -
Thinking in java中创建线程任务Task的基本方法
Thinking in java中创建线程任务Task的基本方法使用Executor而不是显式地创建Thread对象的原因原创 2017-06-26 17:24:22 · 860 阅读 · 0 评论 -
Thinking in java 单个生产者消费者ChefWaitPerson锁获取执行程序
Thinking in java 单个生产者消费者ChefWaitPerson锁获取执行程序原创 2017-06-29 12:26:38 · 380 阅读 · 0 评论