zoukankan      html  css  js  c++  java
  • Executor多线程框架使用

    转载自:https://www.cnblogs.com/SimpleWu/p/9709272.html

    以后再补全

    常用接口:

    1)创建固定数目线程的线程池:

    public static ExecutorService newFixedThreadPool(int nThreads)

    2)执行一个线程

    void java.util.concurrent.Executor.execute(Runnable command)

    3)查看当前活动线程个数

    int java.util.concurrent.ThreadPoolExecutor.getActiveCount()

    4)结束掉所有的线程

    void java.util.concrrent.ExecutorService.shutdonw()

    Executor在管理多个线程的时候会进行有效的安排。处理,比如创建的时候线程池里有10个线程,加入实现线程超过10个Executor会进行有效的队列阻塞和调度。对于我们开发者开说这是透明的,完全不需要关心它内部是怎么进行的操作。

    实例代码:

    package com.java.executor;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ThreadPoolExecutor;
    
    public class ExecutorTest {
        private static Integer count = 1; //数量
        
        private static boolean flag = true;//是否执行
        public static void main(String[] args) {
            ExecutorService executorService = Executors.newFixedThreadPool(10);//在连接池中初始化10个线程
            while(flag){
                if(count<=100){
                    executorService.execute(new Runnable() {
                        @Override
                        public void run() {
                            System.out.println("执行 : " + count++);
                        }
                    });
                }else{
                    //判断是否有活动线程
                    if(((ThreadPoolExecutor)executorService).getActiveCount()==0){
                        executorService.shutdown();//结束所有线程
                        flag=false;
                        System.out.println("完成操作");
                    }
                }
                try {
                    Thread.sleep(100);//休息0.1秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    这是Executor简单的使用方式,方便快捷,学习难度底,在这里我们为什么要休息0.1秒呢,在上面这段代码上我们是没有加锁的,如果不休息在这段代码上等count大于100的时候,线程还在活动中会导致线程没有进行关闭,加上线程执行速度的飞快会超过我们需求,并且在爬虫爬网页的时候使用这么块的速度是很容易封IP的。

  • 相关阅读:
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (四) 自动化部署
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (三) 服务观测
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (二) 部署微服务程序
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (一) 部署 Nacos
    C++知识点
    libmkl 学习笔记
    基于tesseract-OCR进行中文识别
    poco编译与运行
    Linux下的I/O复用与epoll详解(转载)
    高并发网络编程之epoll详解(转载)
  • 原文地址:https://www.cnblogs.com/But-you/p/9709541.html
Copyright © 2011-2022 走看看