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();
        }
    }
  • 相关阅读:
    ACM学习历程—UESTC 1219 Ba Gua Zhen(dfs && 独立回路 && xor高斯消元)
    ACM学习历程—BZOJ 2115 Xor(dfs && 独立回路 && xor高斯消元)
    ACM学习历程—HDU 5536 Chip Factory(xor && 字典树)
    ACM学习历程—HDU 5534 Partial Tree(动态规划)
    ACM学习历程—HDU 3949 XOR(xor高斯消元)
    CSS 负边距读后感
    移除input number上的spinner
    js另类值交换
    自己写js库,怎么支持AMD
    <strong>和 <b> 的区别
  • 原文地址:https://www.cnblogs.com/liruilong/p/12562323.html
Copyright © 2011-2022 走看看