设计模式和线程设计模式

锁与线程设计模式

  1. Volatile:可见性和顺序性,不保证原子性
  2. 单例模式
  3. 监控线程生命周期的Observable:
     采用一个Observable接口来获取任务运行的状态,主要想法是重写run方法。在任务创建,开始,结束,错误时介入一个方法,用来进行处理。同时维护一个指示任务状态的类变量。采用模板设计模式的方式,将具体业务写成方法接口,在run方法中调用。
  4. Single Thread Execution设计模式:强制每次都是只有一个线程能获得所有所需资源
  5. 读写锁分离设计模式,拓展:StampedLock
    读写锁其实是一个工厂类方法,其中提供了读锁和写锁,并且提供了当前读锁的个数,写锁的个数,等待写锁的个数。而读锁和写锁只负责加锁和解锁。读锁和写锁都会使用读写锁中的一个共有的MUTEX object作为读写锁的共享变量。在读锁中,先要请求mutex,之后,如果是有写锁或者有等待的写锁并且偏好写锁,则使用wait,否则就可以加锁。写锁则是只要当前有读锁或者写锁都会进入等待。解锁则是常规的唤醒其他等待中进程,并且根据需要改变偏好标记。
  6. 不可变对象设计模式:每一次都是返回一个新的对象
  7. Future模式:线程将任务提交后继续其他任务,会调接口或者显示方法获得结果。、
     首先future只用来判断任务是否结束以及得到结果,而任务的状态和结果都是由实例变量控制的。所谓的结果也是由线程运行完了任务后传入future类实例的。
     那么控制的方法就是:最开始future的任务标记设为未结束,结果变量为空,获得结果的方法get和接收result的方法future将结果设为共享变量。get方法在请求时,发现任务标记为false就会进入阻塞等待。future方法在请求后就会设置result并改变任务标记为已结束,并唤醒get进程。
     而提交任务的类只负责新建一个future,启动线程,并且运行任务,以及在任务结束后调用对应future的finish方法。
    拓展:completablefuture
  8. 线程上下文设计模式:为每一个Thread设置ThreadLocalMap使得一个线程下有全局的信息,避免层层传递信息
  9. Balking设计模式:多个线程去修改一个共享变量时(做结果相同的操作),当发现有其他线程已经先开始做这个操作后,自动放弃这次的行为。
  10. Latch设计模式:为一个任务设定多个前置任务时,当这些前置任务彼此不影响时,可以并发执行这些任务,并且直到所有前置任务完成,该任务才开始。
  11. Thread-Per-Message模式即是为每一个消息开辟一个线程(或者使用线程池),来维护一系列消息的传输。
  12. two-phase-message模式用于将结束进程设置为两个阶段,增加了新的释放资源的阶段,将要释放资源的线程放入一个队列中在最后从队列中取出线程做最后的资源释放。
  13. worker-thread 模式类似于流水线,上游提供任务,流水线中得到产品并且使用其中的步骤方法。

一般设计模式

  1. Facade设计模式,翻译为外观模式,主要是将一系列操作进行封装抽象成一个新的系统层,在使用的时候,客户端只需要去调用这个系统的一个方法就可以完成连续的为一个目的而服务的操做了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值