11 2014 档案

设计模式8---模板模式
摘要:问题:有多个学生需要答题,如果用手抄的方式,题目很容易出错,而如果复印的话,大家题目都一致。业就是说:对于学生来说,除了答案不一致以为,其他都应该一致。业就是,尽可能的把相同的代码以父类的形式封装起来,而其他不同之处可以以多台的新式呈现!public abstract class AbstractT... 阅读全文

posted @ 2014-11-30 15:51 Joyfulmath 阅读(109) 评论(0) 推荐(0)

设计模式7---原型模式
摘要:原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是选型模式的用意。 Client端只需要知道接口的clone方法,而不需要具体哪些东西被clone了。ConCreatePrototype实际上对于Client端... 阅读全文

posted @ 2014-11-30 15:42 Joyfulmath 阅读(156) 评论(0) 推荐(0)

设计模式6---代理模式
摘要:代理模式的核心其实就是在 上层代码和framework层代码之间增加一个中间层。 从而对于核心代码来说,对于上层是透明的。 使用代理模式可以很好的,剪切核心代码功能,或者扩展功能已符合上层代码的使用。 已一个开关camera的例子来演示代理模式: 1.对于上层来说,并不关心camera的... 阅读全文

posted @ 2014-11-28 17:45 Joyfulmath 阅读(188) 评论(0) 推荐(0)

设计模式5---装饰模式
摘要:问题:人要穿衣服,可以穿鞋子,裤子,领带。。。,顺序可以使随机的。 也就是包含大量随机的操作,但是我们的结果却需要一个明确的顺序去执行这个方法。 UML图:该方法的变种是,可以Decorate直接继承自RealComponent。上图的方法可以通过接口来操作,符合开闭原则。这样所有实现com... 阅读全文

posted @ 2014-11-28 14:29 Joyfulmath 阅读(195) 评论(0) 推荐(0)

设计模式4---策略模式
摘要:商场中计算价格,经常为有很多促销方式。 面向对象的精髓在于抽象出相同的部分已符合人类的思维方式。 当有很多种算法可以替换(比如商品价格算法时),可以使用策略模式。 UML图: Strategy为策略基类,所有商品价格的计算都是一种算法而已。 ContextInterface用来封装具体算... 阅读全文

posted @ 2014-11-27 16:36 Joyfulmath 阅读(190) 评论(0) 推荐(0)

设计模式3---抽象工厂模式
摘要:public interface IFactory { IUser CreateUser(); IDepartment CreateDepartment();}在工厂模式中,每个工厂类会为特定的操作类型产生操作对象类。但是如果有产品系列的话,工厂模式就不太适用。考虑一个数据库的问题。1.... 阅读全文

posted @ 2014-11-27 14:08 Joyfulmath 阅读(247) 评论(0) 推荐(0)

设计模式2---工厂模式
摘要:为了解决简单工厂模式的缺点,我们通过接口IFactory抽象出工厂类,然后每次增加一个操作类,我就增加工厂类,从而达到:对扩展开放,对修改关闭。还是计算器的问题:UML如下:factory 基类:public interface IOperatorFactory { AbstractOpera... 阅读全文

posted @ 2014-11-26 15:18 Joyfulmath 阅读(216) 评论(0) 推荐(0)

设计模式1---普通工厂模式
摘要:工厂模式的精髓在于:当需要不同的条件产生具有多态性质的一组类时,可以考虑使用factory类,来生成。所以工厂模式的特征:1.需要有一个抽象的基类。2.需要用到一组子类,这些类需要相同的基类。3.需要通过一个factory类的static方法产生这一组基类。下面是一个计算器的例子:UML图如下:如上... 阅读全文

posted @ 2014-11-26 14:21 Joyfulmath 阅读(309) 评论(0) 推荐(0)

设计模式 序
摘要:设计模式是前人总结的“内功心法”。是通过大量实践和操作总结出来的经验。 代码设计的原则在于:可复用,易扩展,低耦合性。 尤其是前台界面逻辑和后台业务逻辑,应该是隔离开来。 最合理的状态应该是,修改或增加某个功能,只需要做少量的修改即可。 面向对象的特点就是,封装,继承和多态。应该尽可能的... 阅读全文

posted @ 2014-11-26 14:00 Joyfulmath 阅读(210) 评论(0) 推荐(0)

秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock (续)
摘要:java 包实现了读写锁的操作:package com.multithread.readwritelock;import java.util.concurrent.CountDownLatch;import java.util.concurrent.Executor;import java.util... 阅读全文

posted @ 2014-11-21 16:15 Joyfulmath 阅读(371) 评论(0) 推荐(0)

转---秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock
摘要:在《秒杀多线程第十一篇读者写者问题》文章中我们使用事件和一个记录读者个数的变量来解决读者写者问题。问题虽然得到了解决,但代码有点复杂。本篇将介绍一种新方法——读写锁SRWLock来解决这一问题。读 写锁在对资源进行保护的同时,还能区分想要读取资源值的线程(读取者线程)和想要更新资源的线程(写入者线程... 阅读全文

posted @ 2014-11-21 16:12 Joyfulmath 阅读(428) 评论(0) 推荐(0)

转---秒杀多线程第十二篇 多线程同步内功心法——PV操作上 (续)
摘要:PV操作的核心就是 PV操作可以同时起到同步与互斥的作用。1.同步就是通过P操作获取信号量,V操作释放信号量来进行。2.互斥其实就是,同时操作P操作,结束后进行V操作即可做到。Java上实现PV操作可以通过Semaphore来实现。package com.multithread.pvoperator... 阅读全文

posted @ 2014-11-20 11:21 Joyfulmath 阅读(297) 评论(0) 推荐(0)

转---秒杀多线程第十二篇 多线程同步内功心法——PV操作上
摘要:阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇一个经典的多线程同步问题》《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经典线程同步互斥量Mutex》《秒杀多线程第八篇经典线程同步信号量Semaphore》《秒杀多线程第九篇经典线程同步总... 阅读全文

posted @ 2014-11-20 11:15 Joyfulmath 阅读(427) 评论(0) 推荐(0)

秒杀多线程第十一篇 读者写者问题(续)
摘要:java实现:本问题的关键是读者写者之间的同步问题,尤其使用java来操作。1.等待读者,使用CountDownLatch mReaderLatch, 但是CountDownLatch只能使用一次,所以需要每次都new 一个。或者可以考虑使用semaphore代替,但是semaphore需要acqu... 阅读全文

posted @ 2014-11-12 17:50 Joyfulmath 阅读(307) 评论(0) 推荐(1)

转---秒杀多线程第十一篇 读者写者问题
摘要:与上一篇《秒杀多线程第十篇 生产者消费者问题》的生产者消费者问题一样,读者写者也是一个非常著名的同步问题。读者写者问题描述非常简单,有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者在读文件时写者也不去能写文件。上面是读者写者问题示意图,类似于生产者消费者问... 阅读全文

posted @ 2014-11-12 17:42 Joyfulmath 阅读(286) 评论(0) 推荐(0)

秒杀多线程第十篇 生产者消费者问题 (续)
摘要:使用java 和semaphore实现的 ,多个生产者和多个消费者的问题。1.使用Semaphore,Semaphore的大小设定为BUFFER_LENGTH。也就是同时最多有这么多线程来操作缓冲区。2个semaphore, empty和exist。默认开始缓冲区为空1)StoreEmpty 在开始... 阅读全文

posted @ 2014-11-12 10:30 Joyfulmath 阅读(450) 评论(0) 推荐(0)

转----秒杀多线程第十篇 生产者消费者问题
摘要:继经典线程同步问题之 后,我们来看看生产者消费者问题及读者写者问题。生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给 若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中... 阅读全文

posted @ 2014-11-12 10:14 Joyfulmath 阅读(293) 评论(0) 推荐(0)

转----秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
摘要:前面《秒杀多线程第四篇一个经典的多线程同步问题》提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了四篇《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经... 阅读全文

posted @ 2014-11-06 11:04 Joyfulmath 阅读(252) 评论(0) 推荐(0)

秒杀多线程之CyclicBarrier
摘要:CyclicBarrier是用来一个关卡来阻挡住所有线程,等所有线程全部执行到关卡处时,再统一执行下一步操作。package com.multithread.cyclicbarrier;import java.util.concurrent.CyclicBarrier;import java.uti... 阅读全文

posted @ 2014-11-05 16:57 Joyfulmath 阅读(323) 评论(0) 推荐(0)

转发---[沧海拾遗]java并发之CountDownLatch、Semaphore和CyclicBarrier
摘要:JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch、Semaphore和CyclicBarrier。 CountDownLatchCountDownLatch是一个计数器闭锁,主要的功能就是通过await()方法来阻塞住当前线程,然后等待计数器减少到0了,再唤起这些线... 阅读全文

posted @ 2014-11-05 16:09 Joyfulmath 阅读(207) 评论(0) 推荐(0)

秒杀多线程第七篇 经典线程同步 互斥量Mutex(续)
摘要:java使用Synchronized关键字实现互斥,而同时有Lock支持。这两个的效果是等同的,Synchronized性能的起伏较大,而lock比较收敛。为了代码的可读性,Synchronized更建议使用。 阅读全文

posted @ 2014-11-05 16:06 Joyfulmath 阅读(176) 评论(0) 推荐(0)

秒杀多线程第八篇 经典线程同步 信号量Semaphore (续)
摘要:java semaphore实现:Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过acquire()获取一个许可,如果... 阅读全文

posted @ 2014-11-05 15:16 Joyfulmath 阅读(376) 评论(0) 推荐(0)

转---秒杀多线程第八篇 经典线程同步 信号量Semaphore
摘要:阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇一个经典的多线程同步问题》《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经典线程同步互斥量Mutex》前面介绍了关键段CS、事件Event、互斥量Mutex在经典线程同步问题中的使用。本篇介... 阅读全文

posted @ 2014-11-05 15:12 Joyfulmath 阅读(207) 评论(0) 推荐(0)

转--- 秒杀多线程第七篇 经典线程同步 互斥量Mutex
摘要:阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇一个经典的多线程同步问题》《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》前面介绍了关键段CS、事件Event在经典线程同步问题中的使用。本篇介绍用互斥量Mutex来解决这个问题。互斥量也是一个内核对象,它用来... 阅读全文

posted @ 2014-11-05 14:17 Joyfulmath 阅读(255) 评论(0) 推荐(0)

转---Post/Redirect/Get pattern
摘要:今天重新认识了Post/Redirect/Get pattern, 感谢hip-hop的session, 一下帮助我理清了概念和思路.谈到pattern,首先要清楚它为了什么而产生: PRG (参见链接1)是为了解决web页面的double submit问题而提供的一种方案.1. double su... 阅读全文

posted @ 2014-11-05 11:40 Joyfulmath 阅读(594) 评论(0) 推荐(0)

转--- 秒杀多线程第六篇 经典线程同步 事件Event
摘要:阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇 一个经典的多线程同步问题》《秒杀多线程第五篇 经典线程同步关键段CS》上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇介绍用事件Event来尝试解决这个线程同步问题。首... 阅读全文

posted @ 2014-11-05 11:08 Joyfulmath 阅读(308) 评论(0) 推荐(0)

转---秒杀多线程第五篇 经典线程同步 关键段CS
摘要:上一篇《秒杀多线程第四篇 一个经典的多线程同步问题》提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题。本文首先介绍下如何使用关键段,然后再深层次的分析下关键段的实现机制与原理。关键段CRITICAL_SECTION一共就四个函数,使用很是方便。下面... 阅读全文

posted @ 2014-11-04 15:43 Joyfulmath 阅读(280) 评论(0) 推荐(0)

转--秒杀多线程第四篇 一个经典的多线程同步问题(续)
摘要:demo in java:package com.multithread.main.sampleExample;import com.multithread.main.ExampleInterface;public class SampleExample extends ExampleInterfa... 阅读全文

posted @ 2014-11-04 15:09 Joyfulmath 阅读(166) 评论(0) 推荐(0)

转--秒杀多线程第四篇 一个经典的多线程同步问题
摘要:上一篇《秒杀多线程第三篇原子操作 Interlocked系列函数》中介绍了原子操作在多进程中的作用,现在来个复杂点的。这个问题涉及到线程的同步和互斥,是一道非常有代表性的多线程同步问题,如果能将这个问题搞清楚,那么对多线程同步也就打下了良好的基础。程序描述:主线程启动10个子线程并将表示子线程序号的... 阅读全文

posted @ 2014-11-04 15:07 Joyfulmath 阅读(236) 评论(0) 推荐(0)

导航