高天乐 welcome you

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2013年9月16日

摘要: Server端代码:public class NioServer { //通道管理器 private Selector selector; //获取一个ServerSocket通道,并初始化通道 public NioServer init(int port) throws IOException{ //获取一个ServerSocket通道 ServerSocketChannel serverChannel = ServerSocketChannel.open(); serverChannel.configureBlock... 阅读全文
posted @ 2013-09-16 23:41 高天乐 阅读(19446) 评论(2) 推荐(5) 编辑

2013年9月8日

摘要: 字面翻译是“两阶段终止”,这个模式用来进行结束操作后,再终止线程。比如我们想停止一个线程,但是让他停止之前必须要做一些清理工作,这时候就需要用到two-phase termination模式。public class TwoPhaseTerminationTest { /** * @param args */ public static void main(String[] args) { System.out.println("main begin"); try { CountupThread t = new Co... 阅读全文
posted @ 2013-09-08 14:47 高天乐 阅读(383) 评论(0) 推荐(0) 编辑

摘要: Future是未来,预期的意思,Thread-permessage模式是指将任务交给其他线程来做,但是如果想知道处理的结果,就要使用Future模式,它的典型应用时执行一个需要花一些时间的方法,会立即返回一个future提货单,然后调用方可以继续处理自己的业务逻辑,然后需要的时候再查看future是否返回,一直等到future结果已经处理完毕。thread-pre-message模式发送的请求很像这样 host.request(10,‘A’),只有请求,没有返回值,而future pattern模式发送请求后会马上就要有返回值,类似这样 Data data=host.request(10,&# 阅读全文
posted @ 2013-09-08 12:30 高天乐 阅读(512) 评论(0) 推荐(0) 编辑

摘要: Worker是“工人”的意思,worker thread pattern中,工人线程(worker thread)会一次抓一件工作来处理,当没有工作可做时,工人线程会停下来等待心得工作过来。Worker Thread也叫做background thread,另外,也有人把视点放在管理工人线程的地方,称之为Thread Pool。public class WorkerThreadTest { /** * @param args */ public static void main(String[] args) { Channel channel = ne... 阅读全文
posted @ 2013-09-08 00:38 高天乐 阅读(1718) 评论(0) 推荐(0) 编辑

摘要: Per是“每一”的意思,所以thread per message解释过来就是“每个消息一个线程”,message在这里可以看做是“命令”或“请求”的意思,对每隔命令或请求,分配一个线程,有这个线程执行。使用thread-pre-message模式时,“委托消息的一端”与“执行消息的一端”会是不同的线程,也就像是委托消息的线程,对执行消息的线程说“这个任务交给你了”。public class ThreadPreMessageTest { /** * @param args */ public static void main(String[] args) { ... 阅读全文
posted @ 2013-09-08 00:04 高天乐 阅读(612) 评论(0) 推荐(0) 编辑

2013年9月7日

摘要: 当线程“读取”实例的状态时,实例的状态不会改变,只有线程对实例“写入”操作时才会改变。read-write lock 模式将读取和写入分开来处理,在读取数据前获取读锁定,而写入之前,必须获取写锁定。public class ReadWriteThreadTest { public static void main(String[] args) { Data data = new Data(5); new ReaderThread(data).start(); new ReaderThread(data).start(); new R... 阅读全文
posted @ 2013-09-07 23:33 高天乐 阅读(592) 评论(0) 推荐(0) 编辑

摘要: 这个模式跟Guarded模式有点类似,不过需要一个控制台限制请求方和处理方的频度和数量。public class ProducerConsumerTest { /** * @param args */ public static void main(String[] args) { Table table = new Table(3); new MakerThread("MakerThread1", table , 1000).start(); new MakerThread("MakerThread2", ... 阅读全文
posted @ 2013-09-07 20:56 高天乐 阅读(685) 评论(0) 推荐(0) 编辑

摘要: word自动保存功能,如果文档被修改了,后台线程每隔一段时间会自动执行保存功能,但是如果用户在自动保存之前用Ctrl+S手动保存呢?自动保存还会执行吗?答案是不会,因为这个操作时不需要重复做的。public class BalkingTest { public static void main(String[] args) { Data data = new Data("data.txt","(empty)"); new ChangerThread("ChangerThread", data).start(); new AutoSav 阅读全文
posted @ 2013-09-07 20:16 高天乐 阅读(863) 评论(0) 推荐(0) 编辑

摘要: 线程在运行过程中需要停下来等待,然后再继续执行。范例程序,一个线程(ClientThread)对另外一个线程(ServerThread)传递请求,实现一个模拟消息通道的功能。public class GuardedSuspensionTest { public static void main(String[] args) { RequestQueue queue = new RequestQueue(); ClientThread ct = new ClientThread(queue, "Alice's Client"); ServerThread st = n 阅读全文
posted @ 2013-09-07 19:30 高天乐 阅读(694) 评论(0) 推荐(0) 编辑

摘要: 上一章讲的是线程互斥的synchronized实现,这样做会影响性能,如何才能做到既不影响性能又能达到线程安全的目的呢,就是使用状态绝不会改变的类,Java中的应用就是String类。public class ImmutableThreadTest { /** * @param args */ public static void main(String[] args) { Person p = new Person("Alice", "Alaska"); new PrintPersonThread(p).start(); new PrintPerson 阅读全文
posted @ 2013-09-07 17:19 高天乐 阅读(608) 评论(0) 推荐(0) 编辑