• 线程池使用实例


    线程池:

    package com.mainserver;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.config.ServerConfig;
    
    /**
     * 业务线程池
     * */
    public class ThreadBusiness {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(ThreadBusiness.class);
    
        private final ExecutorService executorService;
    
        private static ThreadBusiness INSTANCE = new ThreadBusiness(ServerConfig.getInstance().getHandleThreadNumber());
    
        public static ThreadBusiness getInstance() {
            return INSTANCE;
        }
    
        private ThreadBusiness(int threadNumber) {
            executorService = Executors.newFixedThreadPool(threadNumber);
        }
        
        /**
         * 执行线程
         * */
        public void execute(Runnable runnable) {
            if (null == runnable) {
                return ;
            }
            
            executorService.execute(runnable);
        }
    
        /**
         * 关闭线程池
         */
        public void shutdown() {
            try {
                executorService.shutdown();
                while (executorService.awaitTermination(1, TimeUnit.SECONDS)) {
                    LOGGER.info("server executor stop");
                    break;
                }
            } catch (InterruptedException e) {
                LOGGER.error("server awaitTermination exception: {}", e);
            }
        }
    
    }

    执行线程:

    public class ServerNetHandler extends SimpleChannelInboundHandler<ReqPacket> {
    
        @Override
        public void channelActive(ChannelHandlerContext ctx) throws Exception {
            System.out.println("get new connect..");
    
            writeData(ctx.channel());
        }
    
        @Override
        protected void channelRead0(ChannelHandlerContext ctx, ReqPacket reqPacket) throws Exception {
            if (!(reqPacket instanceof ReqPacket)) {
                if (ServerConfig.getInstance().ismScreepPrint()) {
                    System.out.println("it isnt my type");
                }
                return;
            }
    
            RequestHandler handler = new RequestHandler(reqPacket);
            ThreadBusiness.getInstance().execute(handler);
        }
    }

    线程业务:

    public class RequestHandler implements Runnable {
    
        private static final Logger log = LoggerFactory.getLogger(RequestHandler.class);
    
        private ReqPacket req;
    
        public RequestHandler(ReqPacket reqPacket) {
            this.req = reqPacket;
        }
    
        @Override
        public void run() {
            switch (req.header.cmd) {
            case eCommand.LOGIN_SERVER_LIST_VALUE:
                // 获取登录服列表
                writeLoginList(req);
                break;
            case eCommand.SYS_ADDANDUPDATE_SERVERLIST_VALUE:
                // 增加和更新登录服务器列表
                sysAddAndUpdateServerList(req);
                break;
    
            default:
                break;
            }
        }
  • 相关阅读:
    软工实践寒假作业(2/2)
    Java 内存溢出分析
    个人作业——软件工程实践总结&个人技术博客
    个人作业——软件测评
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次作业-疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    个人作业——软件工程实践总结&个人技术博客
    配合springboot的快速运维脚本
  • 原文地址:https://www.cnblogs.com/zhuawang/p/4175454.html
Copyright © 2020-2023  润新知