本文将介绍并发编程中的 Thread-Per-Message 模式,它是一种最简单的分工方式。
一、什么是 Thread-Per-Message 模式?
Thread-Per-Message,即一个 Thread 一个 Message,为每个任务分配一个独立的线程,它是一种最简单的分工方式。
二、示例 - echo
Thread-Per-Message 模式的一个最经典的应用场景是网络编程中服务端的实现,服务端会被每个请求创建一个独立的线程,当线程处理完请求后,自动销毁。
下面将展示网络编程中最简单的 echo 程序,它将原封不动地返回请求,如下:
1 2 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 中,线程与操作系统线程一一对应,这导致线程是一个重量级的对象,其创建成本很高(创建耗时多、占用内存大),因此不建议使用该模式。
参考