初探-----同步,异步,阻塞,非阻塞
来源:互联网 发布:微信开发必须80端口 编辑:程序博客网 时间:2024/06/07 17:07
一、有瑕疵,但是有趣的故事。有助于我们理解
二、不同模式下的系统交互图
A、同步阻塞模式
B、同步非阻塞模式
C、异步非阻塞模式
三、其他人的观点
A同学说:
B同学说:
四、代码示例
同步阻塞式I/O
//TimeServer.javaimport java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class TimeServer { public static void main(String[] args) throws IOException { int port = 8080; if(args != null && args.length > 0){ port = Integer.valueOf(args[0]); } ServerSocket server = null; try { server = new ServerSocket(port); System.out.println("The time server is start in port : "+port); Socket socket = null; while(true){ socket = server.accept(); new Thread(new TimeServerHandler(socket)).start(); } } finally { // TODO: handle finally clause if(server != null){ System.out.println("The time server close"); server.close(); server = null; } } }}//TimeServerHandler.javaimport java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class TimeServerHandler implements Runnable{ private Socket socket; public TimeServerHandler(Socket socket) { // TODO Auto-generated constructor stub this.socket = socket; } @Override public void run() { // TODO Auto-generated method stub BufferedReader in = null; PrintWriter out = null; try { in = new BufferedReader(new InputStreamReader( this.socket.getInputStream())); out = new PrintWriter(this.socket.getOutputStream(),true); String currentTime = null; String body = null; while(true){ body = in.readLine(); if (body == null) break; System.out.println("The time server reveive order : "+body); currentTime="QUERY TIME ORDER".equalsIgnoreCase(body)?new java.util.Date( System.currentTimeMillis()).toString():"BAD ORDER"; out.println(currentTime); } } catch (Exception e) { // TODO: handle exception if(in != null){ try { in.close(); } catch (Exception e2) { // TODO: handle exception } } if(out != null){ out.close(); out = null; } if(this.socket !=null){ try { this.socket.close(); } catch (Exception e2) { // TODO: handle exception } this.socket = null; } } } }//TimeClient.javaimport java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class TimeClient { public static void main(String[] args) { int port = 8080; if(args != null && args.length>0){ try { port = Integer.valueOf(args[0]); } catch (Exception e) { // TODO: handle exception } } Socket socket = null; BufferedReader in = null; PrintWriter out = null; try { socket = new Socket("127.0.0.1",port); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out= new PrintWriter(socket.getOutputStream(),true); out.println("QUERY TIME ORDER"); System.out.println("Send order 2 server succeed."); String resp = in.readLine(); System.out.println("Now is:"+resp); } catch (Exception e) { // TODO: handle exception }finally { if(out != null){ out.close(); out = null; } if(in != null){ try { in.close(); } catch (Exception e2) { // TODO: handle exception } in = null; } if(socket != null){ try { socket.close(); } catch (Exception e2) { // TODO: handle exception } socket = null; } } }}
伪异步式I/O
//TimeServer.javapackage WeiYiBu;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class TimeServer { public static void main(String[] args) throws IOException { int port = 8080; if(args != null && args.length > 0){ try { port = Integer.valueOf(args[0]); } catch (Exception e) { // TODO: handle exception } } ServerSocket server =null; try { server = new ServerSocket(port); System.out.println("The time server is start in port : "+port); Socket socket = null; TimeServerHandlerExecutePool singleExecute = new TimeServerHandlerExecutePool(50, 10000); while(true){ socket = server.accept(); singleExecute.execute(new TimeServerHandler(socket)); } } finally { // TODO: handle finally clause if(server != null){ System.out.println("The time server close"); server.close(); server = null; } } }}//TimeServerHandlerExecutePool.javapackage WeiYiBu;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class TimeServerHandlerExecutePool { private ExecutorService executor; public TimeServerHandlerExecutePool(int maxPoolSize,int queueSize) { // TODO Auto-generated constructor stub executor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), maxPoolSize, 120L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(queueSize)); } public void execute(Runnable task){ executor.execute(task); }}//TimeClient.java和TimeServerHandler.java同上
阅读全文
0 0
- 初探-----同步,异步,阻塞,非阻塞
- 同步阻塞, 同步非阻塞,异步阻塞,异步非阻塞
- 同步、异步、阻塞、非阻塞
- 同步,异步,阻塞,非阻塞
- 同步 异步 阻塞 非阻塞
- 同步,异步,阻塞,非阻塞
- 阻塞,非阻塞,异步,同步
- 同步 异步 阻塞 非阻塞
- 同步 异步 阻塞 非阻塞
- 同步 异步 阻塞 非阻塞
- 同步异步 阻塞非阻塞
- 同步 异步 阻塞 非阻塞
- 同步、异步,阻塞、非阻塞
- 阻塞 非阻塞 同步 /异步
- 同步/异步 阻塞/非阻塞
- 同步 异步 阻塞 非阻塞
- 同步异步 阻塞非阻塞
- 同步 异步 阻塞 非阻塞
- 面试怎么谈薪资——让自己的利益最大化
- Servlet生命周期与工作原理
- jsonp解决同源问题和java结合使用
- 初学Linux--shell
- PHP设计模式-工厂设计模式
- 初探-----同步,异步,阻塞,非阻塞
- linux创建文件的获取读写文件权限设置
- Android进阶#(8/12)让不断升级的系统更好管理——Git 版本控制_Git基本命令
- windows下anaconda(Python)中xgboost的安装
- python系列二(面向对象)
- hdu 6170(正则表达式)
- rz/sz
- [翻译]理解Unity的自动内存管理
- 第六篇:深入浅出UML类图(三)