java多线程设计模式
文章平均质量分 79
xxaizai
这个作者很懒,什么都没留下…
展开
-
Single Threaded Execution
它是“一个线程”的意思,就像一个桥,每次只能通过一个人。下面测试:Gate是表示门的类,经过门(pass)会检查姓名与address的首字母是否相同,如果不同,输出 Passer继承了Thread,它一直反复通过门 Main中有三个Passer,让这三个Passer通过同一个门(这里意味着gate的信息是共享的)pub...原创 2013-04-18 17:57:50 · 70 阅读 · 0 评论 -
Active Object
Active Object Pattern是由很多组件构成的,是一个大型的Pattern。适合大规模问题。 首先由Client发出请求,Active Object的参与者配合得到请求的返回值。 Active Object中,首先异步消息都传递给Proxy,Proxy将这些消息放在队列里面,然后由一个线程(Scheduler)不断的获取这些消...原创 2013-05-05 12:11:19 · 107 阅读 · 0 评论 -
Thread Specific Storage
这个模式是这样的:所有线程都有一个入口,但是内部为每个线程分配了特有的存储空间。 这里需要用到ThreadLocal类,这个类的实例可以想象成保管箱间,他有大量的保管箱房间。ThreadLocal的实例只有一个但是管理多个对对象。他有方法set和(Object)get,set用来存储,这个方法是没有参数的,它会自动存放当前线程;而get用来取(没有拿走)线程...原创 2013-05-04 14:50:31 · 106 阅读 · 0 评论 -
Two Phase Termination
在主线程中启动一个线程t,当主线程向t发出停止执行,t用一个boolean值来控制run中的不断执行过程。t进行终止操作,这里的终止不是是使得线程执行完run方法。public class CountupThread extends Thread { private long counter=0; //计数器 private volatile bool...原创 2013-04-30 20:30:45 · 73 阅读 · 0 评论 -
Future Pattern
如果主线程向别的线程发送请求,别的线程处理完请求后还要返回给主线程一个结果,那么这种状况下应该使用Future Pattern。 示例:Host类中的request方法发送请求,这个方法中启动了一个线程,线程中首先建立实例RealData,RealData的构造中显示一组数据(耗时),然后设置一个属性content;request中的线程再将一个FutureD...原创 2013-04-30 18:33:32 · 73 阅读 · 0 评论 -
Worker Thread
这个模型也称为背景线程。把工作交个被人,让别人启动一个线程做交给的任务,自己继续做自己的事,这是Thread Per Message。而在Worker Thread中,任务交给别人后,并不是每次都开启一个线程,而是不断的重复利用已有的线程。事实上开启一个线程是很耗费时间的工作。 实例中:Request是委托者,它有execute功能。WorkThread不断的...原创 2013-04-29 15:46:55 · 115 阅读 · 0 评论 -
Thread per Message
这个模式是每发来一个请求就分配一个线程,让这个线程去执行工作。委托消息的一端与执行消息的一端是不同的线程。示例中Host类是一个接受请求并构造和启动线程的类。public class Host { private final Helper helper=new Helper(); public void request(final int count,final ...原创 2013-04-27 23:59:55 · 70 阅读 · 0 评论 -
Read Write Lock
读的时候,实例的状态不会改变,“写”会改变线程的状态。 这种模式,把读写分开,读之前获取锁定,不给写;写之前获取锁定,不给读。 示例:WriteThread和ReadThread不断的读写公共的data。类Data中,有读写操作,他有一个lock,读写之前都会进行锁定。这个锁ReadWriteLock是按照如下实现的: 如果...原创 2013-04-27 16:59:41 · 85 阅读 · 0 评论 -
Producer Consumer Pattern
生产者与消费者之间加入一个“桥梁参与者”,它用来缓冲两者之间的处理速度。 示例:MakerThread用来不断的产生cake,把cake送到table上;而EaterThread不断的eat cake。Table用来缓冲两者的生产消费过程,put方法中如果出现table满了,那么put方法就要等待,table不满了就被notify了,然后把cake放到tabl...原创 2013-04-27 16:38:51 · 139 阅读 · 0 评论 -
Balking Pattern
这种模式主要是如果对于一个警戒条件成立,那么就可以执行,如果不满足警戒条件,那么只需要返回,不做任何工作。 示例:Data类表示数据,字段content表示内容,changed字段表示是否改变,如果content改变了而没有存储,那么该字段为true,如果content没有改变或者改变了却已经存储了,那么该字段为false。 change方法...原创 2013-04-27 15:30:29 · 114 阅读 · 0 评论 -
Guarded Suspension Pattern
Guraded Suspend Partten是当前不适合执行时,就进行等待,直到被唤醒去执行。 类Request用来表示请求,这里没有特殊的处理。 RequestQueue是一个队列,用来存储所有由ClientThread发出来的请求,它有两个synchronized方法getRequest和putRequest,putRequest是向...原创 2013-04-18 20:51:47 · 106 阅读 · 0 评论 -
多线程设计模式
java内存模型:主存储器,工作存储器 主存储器就是实例位置所在区域,所有的实例都位于主存储器内。尤其实例所拥有的字段即位于主存储器内的区域。主存储器为所有的线程所共有。 工作存储器为各个线程所拥有的作业区,,所有的线程都用其专用的工作存储器。在工作存储器内,存在有主存储器中必要部分的拷贝,称之为工作拷贝(working copy) 主...原创 2013-05-05 12:46:43 · 84 阅读 · 0 评论