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 }
