Home

Future模式

适用的情况 当一个线程向其他线程委托了处理, 然后还想要得到处理结果时. 实现的方式 编写一个与处理结果具有相同接口的Future类, 在处理的开始立马返回该Future对象, 然后等到被委托的线程处理完毕,再将处理结果设置到Future对象中.这样委托处理的线程就可以在自己觉得合适的时机去获取处理结果, 而不用一直阻塞到结果完成. 相关的模式 在委托的方法等待处理结果的部分可以使用Guarded Suspension模式. 要想在Thread-Per-Message模式中想要获取处理结果的时候可以使用Future模式. 同上, 要想在Worker-Thread模式中获取处理结果也可以使用Future模式. 代码示例: FutureData是...

Read more

Active Object模式

别名 Actor Concurrent Object 适用的情况 actor是一个很抽象多线程模式, 每一个actor是线程独立并且有属于自己的状态, 多个actor互相发送消息以完成最终的任务. 你可以将actor模式理解为一个团队, 这个团队里面的个人就是一个运行在独立线程上的个体, 由他们互相交流并且单独处理自己的工作, 最后完成任务. 关于actor模式, 这里有一篇个人觉得很好的文章(英文)–The actor model in 10 minutes 实现的方式 构造一个ActiveObject类, 来充当actor角色, 有actor角色去完成任务, 并且完成交互. 相关的模式 实现actor角色会用到Worker...

Read more

Worker Thread模式

别名 Thread Pool Background Thread 适用的情况 为了提高响应性, 而经常开启新线程让他负责活动的处理,但是每次开启关闭线程都需要花费时间. 实现的方式 在活动的开始就启动多个线程存放起来, 然后将请求发送给这些线程进行处理.这样就不用每次接受请求的时候再进行创建和关闭线程的工作了. 相关的模式 在将工人线程的处理结果返回给调用的方法时候, 可以使用Future模式. 将请求发送给线程池的缓冲区可以使用Producer-Consumer模式. 代码示例: 示例说明:Channel是请求发送的”管道”, Request代表了每个请求, 然后WorkerThread中执行请求的方法.ClientThread模拟了客户端请求的...

Read more

Read-Write Lock模式

适用的情况 多个线程共享了实例, 实例 是可变的, 对实例进行读的次数大于写的次数.多个线程可以同时读, 但一段时间内只能有一个线程可以进行写. 实现的方式 引入一个ReadWriteLock角色管理前来读和写的线程, 进行互斥处理. 相关的模式 ReadWriteLock进行互斥的部分使用的是Guarded Suspension模式. 当实例是不可变的情况下, 可以使用Immutable模式. 代码示例: 示例介绍:ReaderThread负责读取Data实例中的字符串, WriterThread每个一段时间向Data写入字符串, ReadWriteLock注入Data中, 对Data的读取和写入方法加入了锁. Not...

Read more

Producer-Consumer模式

适用的情况 由多个线程之间处理生产消费的关系, 并且生产和消费不是即时处理的情况, 其中涉及到数据量的线程安全性问题. 实现的方式 在Producer和Consumer之间设立一个中转站Channel, 让Channel来保存和维护数据的安全, 这样生产者和消费者之间就解耦了, 与他们有关的对象是Channel, 并且Channel是线程安全的. 相关的模式 Channel角色保证数据安全状态的时候可以使用Guarded Suspension模式. 在Future模式中, 传递返回值的时候, 可以使用Producer-Consumer模式. Worker-Thread模式中, 对于Worker的请求可以使用Producer-Consumer模式对请求进行控制. 代...

Read more