![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
还不够
这个作者很懒,什么都没留下…
展开
-
ForkingClusterInvoker 多线程快速拿到第一个返回值
public class ForkingClusterInvoker<T> extends AbstractClusterInvoker<T> { private final ExecutorService executor = Executors.newCachedThreadPool( new NamedInter...原创 2019-12-22 21:42:33 · 284 阅读 · 0 评论 -
分布式锁的三种实现的对比
原文: http://www.jianshu.com/p/c2b4aa7a12f1锁是开发过程中十分常见的工具,在处理高并发请求的时候和订单数据的时候往往需要锁来帮助我们保证数据的安全。场景1.前端点击太快,导致后端重复调用接口。两次调用一个接口,这样就会产生同一个请求执行了两次,而从用户的角度出发,他是因为太卡而点了两次,他的目标是执行一次请求。场景2.对于高并发转载 2017-08-14 09:58:38 · 647 阅读 · 0 评论 -
java 线程 join(wait) 后,是如何唤醒
Join 方法:本质上还是根据wait方法实现的。分析join源码发现join方法本身是使用了synchronized修饰符的。是加在方法上面的,意味着。 获取了当前对象的锁,然后继续发现里面的代码调用了wait。意味着我们先锁,再释放,等待唤醒,什么情况下被唤醒呢:/** * Waits at most {@code millis} milliseconds for this t...原创 2019-05-29 14:38:16 · 1435 阅读 · 0 评论 -
AQS的原理浅析
本文是《Java特种兵》的样章,本书即将由工业出版社出版AQS的全称为(AbstractQueuedSynchronizer),这个类也是在java.util.concurrent.locks下面。这个类似乎很不容易看懂,因为它仅仅是提供了一系列公共的方法,让子类来调用。那么要理解意思,就得从子类下手,反过来看才容易看懂。如下图所示:图 5-15 AQS的子类实现这么多类,我们转载 2017-04-01 16:10:24 · 722 阅读 · 0 评论 -
ExecutorService的正确关闭方法
虽然使用ExecutorService可以让线程处理变的很简单,可是有没有人觉得在结束线程运行时候只调用shutdown方法就可以了?实际上,只调用shutdown方法的是不够的。我们用学校的老师和学生的关系来说明这个问题。 shutdown只是起到通知的作用 我们来假设如下场景:学校里在课上老师出了一些问题安排全班同学进行解答并对学生说“开问题转载 2017-12-10 14:51:09 · 4830 阅读 · 0 评论 -
线程池的状态及KeepAliveTime参数
原文:https://segmentfault.com/a/1190000004998918五个状态 // runState is stored in the high-order bits private static final int RUNNING = -1 << COUNT_BITS; private static final转载 2017-12-07 09:29:36 · 16563 阅读 · 0 评论 -
面试必问的CAS,要多了解
原文: https://www.jianshu.com/p/24ffe531e9ee请去看原文前言CAS(Compare and Swap),即比较并替换,实现并发算法时常用到的一种技术,Doug lea大神在java同步器中大量使用了CAS技术,鬼斧神工的实现了多线程执行的安全性。CAS的思想很简单:三个参数,一个当前内存值V、旧的预期值A、即将更新的值B,当且仅转载 2018-01-05 09:21:26 · 438 阅读 · 0 评论 -
轻松学习java可重入锁(ReentrantLock)的实现原理
转自:https://blog.csdn.net/yanyan19880509/article/details/52345422前言相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么实现的。如果真是这样,而且你有兴趣了解,今天我将带领你轻松的学习下java...转载 2018-03-29 18:35:36 · 154 阅读 · 0 评论 -
并发工具类(三)控制并发线程数的Semaphore
并发工具类(三)控制并发线程数的Semaphore简介Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。很多年以来,我都觉得从字面上很难理解Semaphore所表达的含义,只能把它比作是控制流量的红绿灯,比如XX马路要限制流量,只允许同时有一百辆车在这条路上行使,其他的都必须在路口等待,所以前一百辆车会看到绿灯,可以开进这条马路,后面的...转载 2018-04-18 21:47:04 · 152 阅读 · 0 评论 -
java 中的 wait 和 notify 实现的源码分析
原文:https://blog.csdn.net/raintungli/article/details/6532784在oracle JVM 1.6 里面实现的object的wait 和notify方法是在synchronizer.cpp里实现。 先介绍2个对象:1. ObjectMonitor 对象 主要用来监视创立的Object 在synchron转载 2018-05-04 00:18:44 · 610 阅读 · 0 评论 -
java 中的 wait()方法和 sleep()方法的区别
原文:https://blog.csdn.net/liuguangqiang/article/details/49180319sleep()和wait()的区别Java中的多线程是一种抢占式的机制而不是分时机制。线程主要有以下几种状态:可运行,运行,阻塞,死亡。抢占式机制指的是有多个线程处于可运行状态,但是只有一个线程在运行。 当有多个线程访问共享数据的时候,就需要对线程进行同步。线程...转载 2018-05-04 00:19:29 · 268 阅读 · 0 评论 -
JVM源码分析之Object.wait/notify实现
原文:https://www.jianshu.com/p/f4454164c017简书 占小狼转载请注明原创出处,谢谢!最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提供一个稳定的基础,Object作为java中所有对象的基类,其存在的价值不言而喻,其中wait和notify方法的实现多线程协作提供了保证。public class Wai转载 2018-05-04 00:28:34 · 797 阅读 · 0 评论 -
深入剖析ReentrantLock公平锁与非公平锁源码实现
原文:http://blog.csdn.net/lsgqjh/article/details/63685058本文以公平与非公平锁的加锁缩成为主线,分析整个加锁过程。准备知识简介ReentrantLock类图: NonfairSync继承关系: Node结点:作为获取锁失败线程的包装类, 组合了Thread引用, 实现为FIFO双向队列。 下图为N转载 2017-11-30 09:27:57 · 271 阅读 · 0 评论 -
死磕 Java 并发 :Java 内存模型之 happens-before
原文: 微信公众号 程序员大咖 里面各种好文章,大赞来源:chenssy,cmsblogs.com/?p=2102那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见?我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见,但是我们可以指定某些规则,这规则就是happens-befo转载 2017-09-19 13:56:54 · 347 阅读 · 0 评论 -
分布式锁的几种实现方式~
原文:http://www.hollischuang.com/archives/1716目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满转载 2017-08-14 09:34:22 · 296 阅读 · 0 评论 -
利用Future异步获取多线程的返回结果
Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。有了Future就可以进行三段式的编程了,1.启动多线程任务2.处理其他事3.收集多线程任务结果。从而实现了非阻塞的任务调用。在途中遇到一个问题,那就是虽然能异步获取结果,但是Future的结果需要通过isdone来判断是否转载 2017-05-09 00:26:37 · 655 阅读 · 0 评论 -
java concurrent 探秘
原文地址:http://www.cnblogs.com/aurawing/articles/1887056.htmljava concurrent 探秘我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便。而当针对高质量Java多线程并发程序设计时,为转载 2017-05-18 09:48:46 · 242 阅读 · 0 评论 -
What's New on Java 7 Phaser
原文: http://whitesock.iteye.com/blog/11354571 Overview Java 7的并发包中推出了Phaser,其功能跟CyclicBarrier和CountDownLatch有些重叠,但是提供了更灵活的用法,例如支持动态调整注册任务的数量等。本文在Phaser自带的示例代码基础上进行一下简单的分析。 2 Glossary转载 2017-05-18 10:07:06 · 265 阅读 · 0 评论 -
AtomicInteger类的理解与使用
AtomicInteger类的理解与使用首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下:public class Sample1 { private static Integer count = 0; synchronized public static void increment() { count++;转载 2017-06-19 10:29:03 · 316 阅读 · 0 评论 -
工作线程数究竟要设置为多少 | 架构师之路
http://mp.weixin.qq.com/s/BRpngTEFHjzpGv8tkdqmPQ 一、需求缘起Web-Server通常有个配置,最大工作线程数,后端服务一般也有个配置,工作线程池的线程数量,这个线程数的配置不同的业务架构师有不同的经验值,有些业务设置为CPU核数的2倍,有些业务设置为CPU核数的8倍,有些业务设置为CPU核数的32倍。转载 2017-07-09 17:07:37 · 356 阅读 · 0 评论 -
ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
原文:http://dongxuan.iteye.com/blog/901689前记: jdk官方文档(javadoc)是学习的最好,最权威的参考。文章分上中下。上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小参数corePoolSize和maximumPoolSize,BlockingQueue选型(Synchronous转载 2017-08-03 09:32:12 · 285 阅读 · 2 评论 -
ThreadPoolExecutor使用和思考(中)-keepAliveTime及拒绝策略
原文: http://dongxuan.iteye.com/blog/902571前记: jdk官方文档(javadoc)是学习的最好,最权威的参考。文章分上中下。上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小参数corePoolSize和maximumPoolSize,BlockingQueue选型(Sync转载 2017-08-03 09:43:19 · 242 阅读 · 0 评论 -
ThreadPoolExecutor使用介绍
ThreadPoolExecutor使用介绍private static ExecutorService exec = new ThreadPoolExecutor(8, 8, 0L,TimeUnit.MILLISECONDS, new LinkedBlockingQueue(100000),new ThreadPoolExecutor.CallerRunsPolicy转载 2017-07-27 18:40:41 · 293 阅读 · 0 评论 -
ThreadPoolExecutor使用介绍
private static ExecutorService exec = new ThreadPoolExecutor(8, 8, 0L,TimeUnit.MILLISECONDS, new LinkedBlockingQueue(100000),new ThreadPoolExecutor.CallerRunsPolicy());一、简介 线程池类为 Java.转载 2017-08-13 14:55:57 · 259 阅读 · 0 评论 -
java并发编程:Synchronized及其实现原理
原文:http://www.cnblogs.com/paddix/p/5367116.htmlJava并发编程:Synchronized及其实现原理Java并发编程系列:Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理Java并发编程:Synchronized底层优化(轻量级锁、偏向锁)Java 并发编程:线程间的协作(wait/notify/sleep/yie...转载 2018-05-04 00:33:43 · 143 阅读 · 0 评论 -
java fork/join
原文:https://zm8.sm-tc.cn/?src=l4uLj8XQ0IiIiNGeloqHlp6R0ZyQktCejYuWnJOa0I%2FSzc3PzM%2FRl4uSkw%3D%3D&uid=de3942d9e9f370c3d01a508e8d184558&hid=55b72488074455373e4e6f4bd1ccd789&pos=2&cid=9&...转载 2018-04-27 09:06:06 · 261 阅读 · 0 评论 -
Java的Fork/Join任务,你写对了吗?
原文:https://www.liaoxuefeng.com/article/001493522711597674607c7f4f346628a76145477e2ff82000当我们需要执行大量的小任务时,有经验的Java开发人员都会采用线程池来高效执行这些小任务。然而,有一种任务,例如,对超过1000万个元素的数组进行排序,这种任务本身可以并发执行,但如何拆解成小任务需要在任务执行的过程中动态...转载 2018-04-27 11:50:42 · 182 阅读 · 0 评论 -
两个线程分别打印26个英文字母的元音(a,e,i,o,u)和辅音(其他),按字母序输出
1. 两个线程分别打印26个英文字母的元音(a,e,i,o,u)和辅音(其他),按字母序输出方法一:使用wait 和 notify 实现public class WordsAlternant { public static String[] letters = { "a", "b", "c", "d", "e", "f", "g", "h", "i...原创 2019-05-29 10:55:28 · 1590 阅读 · 1 评论 -
轻松掌握java读写锁(ReentrantReadWriteLock)的实现原理
原文:https://blog.csdn.net/yanyan19880509/article/details/52435135前言前面介绍了java中排它锁,共享锁的底层实现机制,本篇再进一步,学习非常有用的读写锁。鉴于读写锁比其他的锁要复杂,不想堆一大波的文字,本篇会试图图解式说明,把读写锁的机制用另外一种方式阐述,鉴于本人水平有限,如果哪里有误,请不吝赐教。公平读写锁ReentrantRea...转载 2018-06-10 13:59:39 · 271 阅读 · 0 评论 -
处理 InterruptedException
原文:https://www.ibm.com/developerworks/cn/java/j-jtp05236.html这样的情景您也许并不陌生:您在编写一个测试程序,程序需要暂停一段时间,于是调用Thread.sleep()。但是编译器或 IDE 报错说没有处理检查到的 InterruptedException。InterruptedException 是什么呢,为什么必须处理它?对于 Int...转载 2018-05-24 16:41:28 · 505 阅读 · 0 评论 -
Java的LockSupport.park()实现分析
原文:https://blog.csdn.net/hengyunabc/article/details/28126139LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数:[java] view plai转载 2018-05-05 13:54:18 · 650 阅读 · 0 评论 -
线程池为什么能维持线程不释放,随时运行各种任务?
原文:https://blog.csdn.net/cjh94520/article/details/70545202线程池之前一直有这个疑问:我们平时使用线程都是各种new Thread(),然后直接在run()方法里面执行我们要做的各种操作,使用完后需要做什么管理吗?线程池为什么能维持住核心线程不释放,一直接收任务进行处理呢?线程线程无他,主要有两个方法,我们先看看start()方法介绍: ...转载 2018-05-05 14:46:10 · 1129 阅读 · 0 评论 -
java如何正确地停止一个线程?
原文:https://www.cnblogs.com/greta/p/5624839.html停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作。停止一个线程可以用Thread.stop()方法,但最好不要用它。虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且是已被废弃的方法。在java中有以下3种方法可以终止正在运行的线程:使用退出标志,使线程正常退出...转载 2018-04-27 17:56:36 · 457 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
原文:https://www.cnblogs.com/dolphin0520/p/3920397.htmlJava并发编程:CountDownLatch、CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学转载 2018-04-27 23:24:17 · 136 阅读 · 0 评论 -
《深入浅出 Java Concurrency》目录
原文:http://www.blogjava.net/xylz/archive/2010/07/08/325587.htmlJ.U.C 整体认识原子操作 part 1 从AtomicInteger开始原子操作 part 2 数组、引用的原子操作原子操作 part 3 指令重排序与happens-before法则原子操作 part 4 CAS操作锁机制 part 1 Lock与ReentrantLo...转载 2018-05-22 09:57:41 · 216 阅读 · 0 评论 -
有什么好的并发书籍推荐?
原文:https://www.zhihu.com/question/27072408Java并发编程实战 (豆瓣) (java并发的圣经)多处理器编程的艺术 (豆瓣) (并发编程的各种算法,java实现,有点难度)并发的艺术 (豆瓣) (多核处理器的共享内存模型中的各种算法)Java虚拟机并发编程 (豆瓣) (jvm平台上各种语言的并发比较,如java,scala,clojure)Java并发编...转载 2018-05-22 09:59:47 · 21787 阅读 · 3 评论 -
Callable异步原理简析
原文:https://blog.csdn.net/u012664375/article/details/66967687Callable异步执行,应该不会陌生,那么在java中是怎么用的呢?又是如何实现的?下面我们循序渐进,慢慢分析。 先看一个例子,实现Callable接口,进行异步计算:package com.demo;import java.util.concurrent.*;public...转载 2018-06-02 23:19:27 · 309 阅读 · 0 评论 -
Java并发编程:Callable、Future和FutureTask原理解析
原文:https://blog.csdn.net/codershamo/article/details/51901057返回结果的任务Callable与FutureExecutor框架使用Runnable作为其基本的任务表示形式。Runnable是一种有很大局限的抽象,它不能返回一个值或抛出一个受检查的异常。Runnable接口:public interface Runnable { pu...转载 2018-06-02 23:20:49 · 179 阅读 · 0 评论 -
Java JUC之Atomic系列12大类实例讲解和原理分解
原文:https://blog.csdn.net/xieyuooo/article/details/8594713在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发中的ABA问题,本文讲述Atomic系列的类的实现以及使用方法,其中包含:基本类:Atomic...转载 2018-05-23 17:55:21 · 180 阅读 · 0 评论