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
  • 相关阅读:
    几款开源的图形界面库(GUI Libraries)
    CMenu菜单
    开源免费的C/C++网络库(c/c++ sockets library) 七剑下天山
    基于MFC的ActiveX控件开发
    VC++中动态生成菜单技巧
    ActiveX控件打包成Cab置于网页中自动下载安装
    VC++API小查
    全面解析MFC应用程序中处理消息的顺序
    CMenu类的使用方法
    跨域单点登录实现(使用iframe)_勇敢的心_百度空间
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/12492329.html
Copyright © 2011-2022 走看看