美文网首页
Executor框架--《Java并发编程实战》读书笔记

Executor框架--《Java并发编程实战》读书笔记

作者: 玖柒叁 | 来源:发表于2023-09-12 10:47 被阅读0次

    Executor的作用

    提供了一种灵活的线程池实现方式,而线程池可以简化线程的管理工作。

    Executor的实现模式

    Executor管理线程池的实现是基于生产者消费者模式。
    生产者:通过execute方法中的workQueue.offer将Runnable任务添加到阻塞队列中。
    消费者:通过execute方法中的addWorker创建Worker,Worker本身是个Runnable,同时也含有Thread变量, run方法调用了runWorker(),runWorker()又通过getTask()获取任务。

    package edu.wyn.concurrent.chapter6;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.concurrent.Executor;
    import java.util.concurrent.Executors;
    
    public class TaskExecutionWebServer {
    
        private static final int NTHREADS = 100;
    
        private static final Executor exe
                 = Executors.newFixedThreadPool(NTHREADS);
    
        public static void main(String[] args) throws IOException {
            ServerSocket serverSocket = new ServerSocket(80);
            while(true) {
                Socket socket = serverSocket.accept();
                Runnable task = () -> handleRequest(socket);
                //将任务的提交过程和执行过程解耦
                //生产者-消费者模式
                /**
                 * 生产者:
                 * 通过execute方法中的workQueue.offer将Runnable任务添加到阻塞队列中(当前线程数已经超过核心线程数)
                 * **/
                /**
                 * 消费者:
                 * 通过execute方法中的addWorker创建Worker,Worker本身是个Runnable,同时也含有Thread变量,关注run方法
                 * run方法调用了runWorker(),runWorker()又通过getTask()获取任务
                 * **/
                exe.execute(task);
            }
        }
    
        private static void handleRequest(Socket socket) {
            try {
                InputStream inputStream = socket.getInputStream();
                byte[] contain = new byte[1024];
                int len;
                while((len = inputStream.read(contain)) != -1) {
                    String str = new String(contain, 0, len);
                    System.out.println(str);
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
    
        }
    }
    

    相关文章

      网友评论

          本文标题:Executor框架--《Java并发编程实战》读书笔记

          本文链接:https://www.haomeiwen.com/subject/cgiyvdtx.html