BS架构 模拟
1 public class BSServer { 2 /* 3 线程池的七大参数 4 1.corePoolSize 线程池核心线程大小 5 2.maximumPoolSize 线程池最大线程数量 6 3.keepAliveTime 空闲线程存活时间 7 4.TimeUnit: 8 unit 空闲线程存活时间单位 9 keepAliveTime的计量单位 10 5.workQueue 工作队列 11 6.threadFactory 线程工厂 12 7.handler 拒绝策略 13 */ 14 // 创建线程池对象 15 private static ExecutorService pool = new ThreadPoolExecutor(3, 5, 6, 16 TimeUnit.SECONDS, new ArrayBlockingQueue<>(2), Executors.defaultThreadFactory(), 17 new ThreadPoolExecutor.AbortPolicy()); 18 19 public static void main(String[] args) { 20 try { 21 // 注册端口 22 ServerSocket serverSocket = new ServerSocket(8080); 23 // 创建一个循环接收多个客户端的请求 24 while (true) { 25 Socket socket = serverSocket.accept(); 26 // 交给独立线程处理 27 pool.execute(new ServerSocketRunnable(socket)); 28 } 29 } catch (Exception e) { 30 e.printStackTrace(); 31 } 32 } 33 }
1 public class ServerSocketRunnable implements Runnable { 2 private Socket socket; 3 public ServerSocketRunnable(Socket socket){ 4 this.socket = socket; 5 } 6 @Override 7 public void run() { 8 try { 9 // 响应消息给浏览器提示 10 PrintStream ps = new PrintStream(socket.getOutputStream()); 11 // 相应HTTP协议格式数据,否则浏览器不识别 12 ps.println("HTTP/1.1 200 OK"); 13 // 响应的数据类型;文本、网页 14 ps.println("Content-Type:text/html;charset=UTF-8"); 15 // 必须发送一个空行 16 ps.println(); 17 // 才可以响应数据回给浏览器 18 ps.println("<span style='color:red;font-size:100px'>《加油努力》</span>"); 19 ps.close(); 20 } catch (Exception e) { 21 System.out.println(socket.getRemoteSocketAddress() + "下线了~~"); 22 } 23 } 24 }