本文将介绍并发编程中的 Thread-Per-Message 模式,它是一种最简单的分工方式。
一、什么是 Thread-Per-Message 模式?
Thread-Per-Message,即一个 Thread 一个 Message,为每个任务分配一个独立的线程,它是一种最简单的分工方式。
二、示例 - echo
Thread-Per-Message 模式的一个最经典的应用场景是网络编程中服务端的实现,服务端会被每个请求创建一个独立的线程,当线程处理完请求后,自动销毁。
下面将展示网络编程中最简单的 echo 程序,它将原封不动地返回请求,如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | final ServerSocketChannel serverSocketChannel = ServerSocketChannel.open().bind(new InetSocketAddress(8080));try {
 while (true) {
 
 SocketChannel socketChannel = serverSocketChannel.accept();
 
 new Thread(() -> {
 try {
 
 ByteBuffer readBuffer = ByteBuffer.allocateDirect(1024);
 socketChannel.read(readBuffer);
 
 Thread.sleep(2000);
 
 ByteBuffer writeBuffer = (ByteBuffer)readBuffer.flip();
 socketChannel.write(writeBuffer);
 
 socketChannel.close();
 } catch(Exception e) {
 throw new UncheckedIOException(e);
 }
 }).start();
 }
 } finally {
 serverSocketChannel.close();
 }
 
 | 
三、说明
在 Java 中,线程与操作系统线程一一对应,这导致线程是一个重量级的对象,其创建成本很高(创建耗时多、占用内存大),因此不建议使用该模式。
参考