美文网首页
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