网络编程复习(二):JDK1.5之前的伪异步BIO编程
来源:互联网 发布:免费仓管软件 编辑:程序博客网 时间:2024/06/03 23:40
在JDK1.5之前并没有提供NIO非阻塞异步通信,在这里说一下什么是BIO:就是同步阻塞形式的通信模式,那么什么是NIO,就是同步非阻塞通信模式,同时,在JDK1.7之后,支持异步非阻塞通信模式,就是所说的NIO2.0.那么是怎么实现多个client连接服务器的呢?答案是使用的是伪异步方式,即自定义线程池加队列方式,下面看看代码:
client类:与上一篇没有任何变化
package 网络编程_最原始BIO2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class Client {public static void main(String[] args) {PrintWriter writer = null;BufferedReader reader = null;Socket client = null;try {client = new Socket("127.0.0.1", 8888);writer = new PrintWriter(client.getOutputStream(), true);//该地方必须加true,设置为自动刷新reader = new BufferedReader(new InputStreamReader(client.getInputStream()));writer.println("接收客户端发送请求");System.out.println("请求已经发出");String body = reader.readLine();System.out.println(body);} catch (Exception e) {e.printStackTrace();} finally {if (reader != null) {try {client.close();} catch (IOException e) {e.printStackTrace();}}if (writer != null) {writer.close();}if (client != null) {try {reader.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}client = null;}}}}
server类:
package 网络编程_最原始BIO2;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import 网络编程_最原始.HanderSocket;public class Server {static ServerSocket server = null;public static void main(String[] args) {try {server = new ServerSocket(8888);System.out.println("server start...");while(true){Socket socket = server.accept();new HanderPoolExecuter(50, 1000).executors(new HanderSocket(socket));}} catch (IOException e) {e.printStackTrace();}finally {if(server!=null){try {server.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}server = null;}}}}
HandlerPoolExecutor自定义线程池类:
package 网络编程_最原始BIO2;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class HanderPoolExecuter { Integer initSize;Integer maxSize;private ExecutorService executorService;private BlockingQueue<Runnable> blockingQueue = new ArrayBlockingQueue<>(1000);public HanderPoolExecuter(int initSize,int maxSize){this.initSize = initSize;this.maxSize = maxSize;executorService = new ThreadPoolExecutor(initSize, maxSize, 60, TimeUnit.SECONDS, blockingQueue);}public void executors(Runnable task){executorService.execute(task);}}
任务类HandlerSocket类,没有任何变化:
package 网络编程_最原始BIO2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class HanderSocket implements Runnable{Socket socket = null;public HanderSocket(Socket socket) {this.socket = socket;}@Overridepublic void run() {BufferedReader reader = null;PrintWriter writer = null;try {reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));writer = new PrintWriter(this.socket.getOutputStream(),true);String body = null;while(true){body = reader.readLine();if(body == null) break;System.out.println(body);writer.println("你好,服务端已经接收到你的请求");System.out.println("已经向客户端反馈结果");}} catch (Exception e) {e.printStackTrace();}finally {if(writer !=null){writer.close();}if(reader !=null){try {reader.close();} catch (IOException e) {e.printStackTrace();}}if(socket!=null){try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}socket = null;}}}}
这种伪异步的方式其实还是阻塞形式的,并不适合当前开发场景,下一篇将介绍JDK1.7之后提供的非阻塞异步NIO通信方式。
阅读全文
0 0
- 网络编程复习(二):JDK1.5之前的伪异步BIO编程
- Java网络编程之BIO(Socket 伪异步)-yellowcong
- 网络编程复习(一):最原始的BIO网络编程
- java 网络编程(二)TCPIP+BIO
- 二、java网络io编程(BIO、NIO)
- Java 网络IO编程总结二(BIO、NIO、AIO)
- java网络编程(二)----同步阻塞bio
- Java网络编程(二) Java I/O分析(jdk1.4之前)
- 网络编程( BIO )
- netty(二) 伪异步I/O编程
- netty学习(二)--传统的bio编程
- RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI
- RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI
- RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序
- RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序
- RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序
- 伪异步IO编程
- 网络编程基础(BIO/NIO)
- Android 源码设计模式解析与实战 第2版 读书笔记1.5 接口隔离原则
- ORB-SLAM(1) --- 让程序飞起来
- springboot+poi导出指定格式Excel模板详解+Demo
- 子类继承父类放法访问权限的问题
- 排序排排排排排!
- 网络编程复习(二):JDK1.5之前的伪异步BIO编程
- PriorityQueue 小根堆和大根堆的讨论
- css与 js动画 优缺点比较
- 一行代码理解泛型
- linux——进程替换
- simhash与重复信息识别
- sqlserver表的数据类型
- Redis学习06——存储字符串集合(set)
- 一个幽灵