zoukankan      html  css  js  c++  java
  • 线程池方式对数组多线程随机取出分析

    题目是这样的:

    使用 ThreadPool 线程池(线程池大小为 3)对一组数组 [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]每个线程只允许随机取出 1 个,取出后删除直 到数组为空,取出的结果重新放到另一数组中。 

    我是这样思考的:

     线程安全实现方式有显示锁,同步块,volatile,处于性能考虑,选择顺序:volatile ,显示锁,同步块,

    读取同一个数组,线程池的方式,需要线程共享,所以选择由Runnable接口实现,不是Thread类。

    我的实现是这样的:

     实习测试遇到,有好的思路请小伙伴留言,请教学习

    package pojo;
    
    import java.util.Arrays;
    import java.util.Random;
    
    /**
     * @Description :
     * @Author: Liruilong
     * @Date: 2020/3/14 2:02
     */
    public class ArrayOperate implements Runnable {
    
        private volatile int[] ints = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
        private volatile int[] getInts = new int[16];
        public  volatile static int index = 0;
    
        @Override
        public  void run() {
            Random random = new Random();
            if (ints.length - index > 0) {
                int indexScope = ints.length - index;
                int indexs = random.nextInt(indexScope);
                getInts[index] = ints[indexs];
                ints[indexs] = ints[indexScope - 1];
                index++;
            }
        }
        public void print() {
            System.out.println("生成的数组为:" + Arrays.toString(getInts));
        }
    
    
    }
    package service;
    
    import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool;
    import pojo.ArrayOperate;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    /**
     * @Description :
     * @Author: Liruilong
     * @Date: 2020/3/14 1:51
     */
    public class ArrayService {
    
    
    
        /**
         * @Author Liruilong
         * @Description  数组线程池操作
         * @Date 13:21 2020/3/14
         * @Param []
         * @return void
         **/
    
        public void randomArray() {
            ExecutorService executorService = Executors.newFixedThreadPool(3);
            ArrayOperate arrayOperate = new ArrayOperate();
            while (ArrayOperate.index < 16) {
                    executorService.execute(arrayOperate);
            }
            arrayOperate.print();
        }
    }
  • 相关阅读:
    核心动画03-图标抖动.mp4
    核心动画02-CAKeyframeAnimation帧动画
    核心动画01-CABasicAnimation
    CALayer参考文献
    CALayer04-自定义图层
    CALayer03-隐式动画
    CALayer02-创建新图层
    iOS开发中的网络请求
    IT教育课程考评系统开发-06
    IT教育课程考评系统开发-05
  • 原文地址:https://www.cnblogs.com/liruilong/p/12562323.html
Copyright © 2011-2022 走看看