![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发编程基础知识
六十三吖
代码也是我生活的一部分
展开
-
CountDown设计模式
转载:https://blog.csdn.net/weixin_40288381/article/details/87474970理解:countdown设计模式设计思想是 当第一阶段任务运行到某个阀门时,才开始第二阶段任务的执行概述Count-Down设计模式其实也叫做Latch(阀门)设计模式。当若干个线程并发执行完某个特定的任务,然后等到所有的子任务都执行...转载 2019-04-10 15:08:01 · 320 阅读 · 0 评论 -
Thread-Per-Message设计模式
转载;https://blog.csdn.net/weixin_42146366/article/details/87475281一、Thread-Per-Message设计模式介绍Thread-Per-Message模式是说为每个请求都分配一个线程,由这个线程来执行处理,使得消息能够并发(但是注意:线程的创建是有限的,可以使用线程池来处理,超过数量则加入等待队列),这里包含两个角色,...转载 2019-04-10 15:15:52 · 285 阅读 · 1 评论 -
Two-phase Termination,两阶段终止模式(承诺)模式
转载:https://www.jianshu.com/p/0f7a19b614e2理解:主要考虑interrupt()的问题有时候,我们希望提前结束线程,但安全可靠地停止线程,并不是一件容易的事情,如果立即停止线程,会使共享的数据结构处于不一致的状态,如目前已经废弃使用的Thread类的stop方法(它会使线程在抛出java.lang.ThreadDeath之后终止线程,即使是...转载 2019-04-10 17:15:53 · 271 阅读 · 0 评论 -
读写锁分离设计模式
转载:https://blog.csdn.net/weixin_40288381/article/details/87393252理解:读写锁分离设计模式的作用是在资源读写时,不用再去关心多线程所造成的读写冲突问题,读的时候加读锁,然后读完释放锁同理,写的时候加写锁,写完释放锁。内在逻辑全部交给了ReadWriterLock来处理。...转载 2019-04-03 13:31:45 · 375 阅读 · 0 评论 -
future设计模式
转载:https://blog.51cto.com/13666149/2091152https://www.jianshu.com/p/444cbe1691be序言有时候会遇到一种情况,当流程到了某个一个节点的时候,数据处理需要花费比较长的时间。只是在最后返回成功或者失败的时候体现,数据处理的结果并不影响后面流程的进展,现在介绍一种设计模式来充分利用时间片段,这个设计模式就是-Fu...转载 2019-04-03 15:43:15 · 173 阅读 · 0 评论 -
Guarded Suspension设计模式
转载:https://blog.csdn.net/leying521/article/details/86303729理解:此设计模式的关键就是队列的插入和提取 使用参考https://blog.csdn.net/kingcat666/article/details/78409260什么是Guarded Suspension设计模式 Suspension是“挂起”...转载 2019-04-03 15:58:13 · 174 阅读 · 0 评论 -
多线程Balking设计模式
转载:https://blog.csdn.net/weixin_40288381/article/details/87473127理解:此设计模式的关键在于请求操作如果没有响应或者没有达到条件则放弃处理概述多个线程监控某个共享变量,A线程监控到共享变量发生变化后即将触发某个动作,但是此时发现有另外一个线程B已经针对该变量开始了行动,因此A放弃了准备开始的动作,我们把这样的...转载 2019-04-03 16:12:26 · 189 阅读 · 0 评论 -
生产者消费者设计模式
转载:https://www.jianshu.com/p/71a5089afe13场景生产者生产数据,消费者消费数据;但是性能处理速度均有差异,因而需要一个中间队列协调;举例3个厨师做甜点,有3个吃货来吃,如果厨师和吃货一对一,厨师的生产速度和吃货的吃饭速度均成成了短板,可能存在这样一种不协调的场景;慢性子厨师款待一个吃饭快的胖吃货,吃货都要饿死了,只能死等; 急...转载 2019-04-03 16:23:48 · 987 阅读 · 0 评论 -
并发编程一:java创建进程和线程
转载:https://www.cnblogs.com/dolphin0520/p/3913517.html一.Java中关于应用程序和进程相关的概念 一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认为java.exe或者javaw.exe(windows下可以通过任务管理器查看)。 Java采用的是单线程编程模型,即在我们自己的程序中如果没有主动创建线程的话...转载 2019-07-05 16:06:16 · 302 阅读 · 0 评论 -
并发编程二:Thread类使用
一、Thread类中的方法通过查看java.lang.Thread类的源码可知: Thread类实现了Runnable接口,在Thread类中,有一些比较关键的属性,比如name是表示Thread的名字,可以通过Thread类的构造器中的参数来指定线程名字,priority表示线程的优先级(最大值为10,最小值为1,默认值为5),daemon表示线程是否是守护线程,target表示要执行的...原创 2019-07-05 16:52:05 · 102 阅读 · 0 评论 -
并发编程五:interrupt中断
转载:https://blog.csdn.net/axman/article/details/562249转载 2019-07-15 16:28:09 · 206 阅读 · 0 评论 -
并发编程八:死锁
转载:https://www.cnblogs.com/xujingyang/p/6677160.html概念:当一个线程永远地持有一个锁,并且其他线程都尝试去获得这个锁时。如果线程A持有锁L并且想获得锁M,线程B持有锁M并且想获得锁L,那么这两个线程将永远等待下去,这种情况就是最简单的死锁形式。一、死锁实现//死锁类(注意这里一定要有"Thread.sleep(2000)"让线程睡一觉...转载 2019-07-15 17:15:30 · 104 阅读 · 0 评论 -
并发编程九:java内存模型
转载:https://blog.csdn.net/qq_34964197/article/details/80937147注意:内存模型和内存区域不是一个概念。(有兴趣自己去学习)明确:内存模型定义了共享内存系统中多线程程序读写操作行为的规范。一、CPU cache模型CPU的处理速度和内存的访问速度差距太大,于是在CPU和主存之间增加了缓存。CPU cache模型如图:Ca...转载 2019-07-16 10:09:38 · 103 阅读 · 0 评论 -
并发编程十:volatile关键字
转载:https://blog.csdn.net/BushQiang/article/details/81349031当多个线程进行操作共享数据时,可以保证内存中的数据可见。 相较于 synchronized 是一种较为轻量级的同步策略。缺点:volatile 不具备“互斥性”volatile 不能保证变量的“原子性”内存可见性是指当某个线程正在使用对象状态而另一个线程在同时修...转载 2019-07-16 10:43:00 · 85 阅读 · 0 评论 -
并发编程三:对象锁和类锁
转载:https://www.cnblogs.com/dolphin0520/p/3923737.html注意:对于synchronized方法或者synchronized代码块,当出现异常时,JVM会自动释放当前线程占用的锁,因此不会由于异常导致出现死锁现象。在了解synchronized关键字的使用方法之前,我们先来看一个概念:互斥锁,顾名思义:能到达到互斥访问目的的锁。个简单的...转载 2019-07-12 13:20:08 · 118 阅读 · 0 评论 -
并发编程四:wait()和notify()和notifyAll()
转载:https://www.cnblogs.com/xrq730/p/4853932.htmlwait()释放锁以及notify()不释放锁需求:线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作。想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000就打印出i,怎么处理?一个办法就是,B线程while(i == 10...转载 2019-07-15 16:06:49 · 147 阅读 · 0 评论 -
并发编程七:线程状态转化
转载:https://www.cnblogs.com/happy-coder/p/6587092.html线程共包括以下5种状态。新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从...原创 2019-07-12 14:25:03 · 108 阅读 · 0 评论 -
线程假死
转载:https://blog.csdn.net/weixin_38178584/article/details/78785022当1个生产者多个消费者或多个生产者多个消费者的场景下,用notify通知wait线程是容易出现假死线程,理解这个现象主要要理解下面两点:1、notify的唤醒消息发出后只能唤醒一个进入wait的线程,但只是唤醒它,让CPU有调度它的可能性,并不是说一定会执行...转载 2019-03-19 10:01:52 · 1165 阅读 · 0 评论 -
线程间通信
转载:https://www.cnblogs.com/hapjin/p/5492619.html一,介绍本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码。二,线程间的通信方式①同步这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信。参考示例:p...转载 2019-03-19 09:54:46 · 69 阅读 · 0 评论 -
等待/通知的经典范式
该范式分为两部分,分别针对等待方(消费者)和通知方(生产者)。等待方遵循如下原则。获取对象的锁。 如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件。 条件满足则执行对应的逻辑。对应的伪代码如下。 synchronized(对象) { while(条件不满足) { 对象.wait(); } 对应的处理逻辑 ...转载 2019-01-14 22:52:57 · 354 阅读 · 0 评论 -
wait()和sleep()区别
对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只...转载 2019-02-21 15:31:11 · 76 阅读 · 0 评论 -
并发-单线程执行设计模式
转载:https://blog.csdn.net/weixin_42146366/article/details/87302250一、介绍我们模拟一个场景:多个游客要验证身份通过一道门三个类:1.Gate:相当于一个资源 调用一个方法pass 方法2.User 是使用资源的地方,也就是每一个用户,或者说是通过门的游客3.SingleClient 当User跑起来的时候不断的使用...转载 2019-03-18 10:06:01 · 150 阅读 · 0 评论 -
Immutable Object(不可变对象)模式
转载:https://www.jianshu.com/p/a9479715818e前面所讲的所有的模式,都是要用到锁的,而锁是会带来一些额外的开销和问题的,那么能不能不通过锁,实现多线程环境下的线程安全呢?其中一个思路就是通过Immutable Object(不可变对象)模式。它使用对外可见的不可变对象,天生具有线程安全的“基因”。因为与多线程的原子性、可见性相关的问题(如失效数据、丢失...转载 2019-03-25 11:10:12 · 404 阅读 · 0 评论 -
并发编程学习十一:多线程的休息室WaitSet详细介绍
转载;https://www.cnblogs.com/ch-forever/p/10752499.html结论所有对象都会有一个wait set,用于存放调用了该对象wait方法之后进入block状态的线程;线程被notify之后,不一定会立即执行;线程从wait set中唤醒的顺序不一定是FIFO;线程被唤醒后,必须重新获取锁。举例public class WaitSe...转载 2019-07-17 11:50:31 · 190 阅读 · 0 评论