zoukankan      html  css  js  c++  java
  • JAVA JUC 线程池

    线程池提供了一个线程队列,队列中保存着所有等待状态的线程.避免了频繁的创建和销毁线程池,提高了响应速度

    java.util.concurrent.Executor: 负责线程池的使用和调度的根接口

      |----ExecutorService 子接口:线程池的主要接口

        |----ThredPoolExecutor 线程池的实现类

        |----ScheduledExecutorService 子接口:负责线程的调度

          |----ScheduledThreadPoolExecutor 继承了ThreadPoolExecutor,实现了ScheduledExecutorService

    java.util.concurrent.Executors: 线程池的工具类

      方法:

        ExecutorService newFixedThreadPool() : 创建固定大小的线程池

        ExecutorService newCachedThreadPool() : 缓存线程池,线程池的大小根据需要自动调整

        ExecutorService newSingleThreadExecutor() : 创建线程池,只包含一个线程

        ScheduledExecutorService newScheduledThreadPool() : 创建固定大小的线程池,可以延时或者定时执行

    线程池应用示例

    package com.LearnJava.JUC;
    
    import javax.swing.*;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.locks.ReentrantLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    class Demo2 implements Runnable{
        private int num;
        private ReentrantLock lock = new ReentrantLock();
        public int Sum(int num){
            int sum = 0;
            for(int i=0;i<num;i++){
                sum+=i;
            }
            return sum;
        }
        @Override
        public void run() {
                while (num<100){
                    int f = 0;
                    lock.lock();
                    f=num++;
                    lock.unlock();
                    System.out.println(Thread.currentThread().getName()+" "+"sum "+f+" "+Sum(f));
                    //System.out.println("sum "+i+" "+Sum(i));
    
                }
    
    
        }
    
    
    }
    public class threadPoolTest {
        public static void main(String[] args) {
            ExecutorService pool = Executors.newFixedThreadPool(5);
            Demo2 d2 = new Demo2();
            for(int i=0;i<10;i++){
                pool.submit(d2);
            }
            pool.shutdown();
        }
    }
    View Code

     scheduledThreadPool示例

        public static void main(String[] args) {
    
            ScheduledExecutorService pool = Executors.newScheduledThreadPool(5);
            for(int i=0;i<10;i++){
                pool.schedule(new Runnable() {
                    @Override
                    public void run() {
                        int s = new Random().nextInt(100);
                        System.out.println(Thread.currentThread().getName()+"  "+s);
    
                    }
                },3, TimeUnit.SECONDS);
            }
            pool.shutdown();
        }
    }
    View Code
  • 相关阅读:
    hdu 3709 Balanced Number 数位dp
    通过大数据分析典型的长尾问题场景及解法
    【无人驾驶技术揭秘】从机器学习角度揭秘学习型避障小车的设计思路
    Git Flow——Git团队协作最佳实践
    【技术合集】新春来袭,锦囊妙计助程序员过个好年
    【最佳编程实践】编写「可读」代码的实践
    【开发工具推荐】31款轻量高效的开源JavaScript插件和库
    【微服务那些事】Microservices场景下的持续部署
    前端图像处理指南
    Sed&awk笔记之awk
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/12492329.html
Copyright © 2011-2022 走看看