您的位置:澳门皇家赌场真人在线 > 皇家赌场游戏 > 澳门皇家赌场:计量一个数与2的n次方取模,ja

澳门皇家赌场:计量一个数与2的n次方取模,ja

发布时间:2019-10-04 15:43编辑:皇家赌场游戏浏览(89)

    1、飞快设置过滤器-Quick

    澳门皇家赌场 1

    HashMap的数据是存储在链表数组里面的。在对HashMap进行插入/删除等操作时,都需要根据K-V对的键值定位到他应该保存在数组的哪个下标中。而这个通过键值求取下标的操作就叫做哈希。HashMap的数组是有长度的,Java中规定这个长度只能是2的倍数,初始值为16。求哈希简单的做法是先求取出键值的hashcode,然后在将hashcode得到的int值对数组长度进行取模。为了考虑性能,Java总采用按位与操作实现取模操作。
    

    单例方式,是一种常用的软件设计格局。在它的为主结构中只蕴涵八个被叫做单例的不一致日常类。通过单例情势能够保障系统中,应用该方式的类叁个类独有多个实例。即三个类唯有三个指标实例。

    有时候有那般的须要,要求多少个线程推行职责,各样线程都施行不一的备选专业,全部计划好了,本事而且实行上边包车型客车做事。那一个怎么落到实处呢?

    澳门皇家赌场 2image.png澳门皇家赌场 3image.png澳门皇家赌场:计量一个数与2的n次方取模,java八个线程同不平日间启幕实践。从这里能够选明日前天等等等等

    ScheduledThreadPoolExecutor能够用来在给定延时后试行异步职责依旧周期性实施职务,相对于职责调整的Timer来讲,其职能更是有力,Timer只好动用二个后台线程实施任务,而ScheduledThreadPoolExecutor则足以经过构造函数来钦点后台线程的个数。ScheduledThreadPoolExecutor类的UML图如下:

    先看代码:

    澳门皇家赌场 4

    • 一是用CyclicBarrier (适用在二十八线程相互等待,直到达到四个屏障点。並且CyclicBarrier是可选拔的。)完结。

    2、相对时间过滤器-Relative

    澳门皇家赌场 5ScheduledThreadPoolExecutor类的UML图.png

    static int indexFor(int h, int length) { return h & ;}
    

    用大臣每便上朝见太岁那事来效仿那几个单例情势,场景如下。

    代码实现:

    澳门皇家赌场 6image.png从那边能够自定义曾几何时辰从前依旧几周在此此前等等

    1. 从UML图可以见到,ScheduledThreadPoolExecutor承接了ThreadPoolExecutor澳门皇家赌场 ,,也正是说ScheduledThreadPoolExecutor具备execute()和submit()提交异步任务的基础效用,关于ThreadPoolExecutor可以看那篇小说。可是,ScheduledThreadPoolExecutor类完毕了ScheduledExecutorService,该接口定义了ScheduledThreadPoolExecutor能够延时推行任务和周期推行任务的机能;
    2. ScheduledThreadPoolExecutor也七个关键的里边类:DelayedWorkQueueScheduledFutureTask。能够见见DelayedWorkQueue实现了BlockingQueue接口,也正是三个封堵队列,ScheduledFutureTask则是三番五次了FutureTask类,也表示该类用于重返异步任务的结果。那三个重大类,下边会实际详尽来看。

    按理说定位HashMap的角标应该是依据h%length来总计,为何这里用的是h & 。原来笔者是思索到位运算效能要比代替取模运算高非常多,主因是位运算直接对内存数据实行操作,无需转成十进制,因而管理速度极快。

    • 圣上那么些类
    public class CyclicBarrierTest { boolean finalFlg = false; /** * CyclicBarrier 适用再多线程相互等待,直到到达一个屏障点。并且CyclicBarrier是可重用的。 */ CyclicBarrier cyclicBarrier = new CyclicBarrier; private void runThread() { ExecutorService executorService = Executors.newFixedThreadPool; for (int i = 0; i < 10; i++) { try { Thread.sleep; } catch (InterruptedException e) { e.printStackTrace(); } executorService.submit(createThread; } } private Thread createThread { Thread thread = new Thread(new Runnable() { @Override public void run() { try { cyclicBarrier.await(); System.out.println("Thread:" + Thread.currentThread().getName() + "准备完毕,time:" + System.currentTimeMillis; } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace; thread.setName("name" + i); return thread; } public static void main(String[] args) { CyclicBarrierTest test = new CyclicBarrierTest(); test.runThread(); }}
    

    3、相对时间过滤器-Absolute

    ScheduledThreadPoolExecutor有如下多少个构造方法:

    那正是说,为啥能够行使位运算来促成取模运算呢?那贯彻的法规如下:

    施行结果:

    澳门皇家赌场 7image.png此间是叁个纯属的日子,直接选就好了。

    public ScheduledThreadPoolExecutor(int corePoolSize) { super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue;};public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory) { super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue(), threadFactory);};public ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler) { super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue(), handler);};public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler) { super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue(), threadFactory, handler);}
    

    X % 2^n = X &

    public class Emperor { private static final Emperor emperor = new Emperor(); static int count = 0; private Emperor(){}; public synchronized static Emperor getEmperor(){ count ++; return emperor; } public void emperorInfo(){ System.out.println("第"+count+"次上朝"); System.out.println; }}
    
    Thread:pool-1-thread-10准备完毕,time:1521037864652Thread:pool-1-thread-1准备完毕,time:1521037864652Thread:pool-1-thread-3准备完毕,time:1521037864652Thread:pool-1-thread-2准备完毕,time:1521037864652Thread:pool-1-thread-7准备完毕,time:1521037864652Thread:pool-1-thread-6准备完毕,time:1521037864652Thread:pool-1-thread-5准备完毕,time:1521037864652Thread:pool-1-thread-4准备完毕,time:1521037864652Thread:pool-1-thread-9准备完毕,time:1521037864652Thread:pool-1-thread-8准备完毕,time:1521037864652
    

    4、柱状图时间过滤器*有两种:*直接点击柱状图就可以查看明细

    能够看到由于ScheduledThreadPoolExecutor承袭了ThreadPoolExecutor,它的构造方法实际上是调用了ThreadPoolExecutor,对ThreadPoolExecutor的牵线能够能够看那篇文章,掌握ThreadPoolExecutor构造方法的多少个参数的意义后,通晓那就很轻松了。可以观察,ScheduledThreadPoolExecutor的主题线程池的线程个数为钦定的corePoolSize,当大旨线程池的线程个数到达corePoolSize后,就能够将职责交给给有界阻塞队列DelayedWorkQueue,对DelayedWorkQueue在上边进行详细介绍,线程池允许最大的线程个数为Integer.MAX_VALUE,也正是说理论上那是贰个大小无界的线程池。

    2n代表2的n次方,也正是说,多个数对2n取模 == 三个数和做按位与运算 。

    • 三九那么些类

    从结果看,线程大致是还要推行的

    本文由澳门皇家赌场真人在线发布于皇家赌场游戏,转载请注明出处:澳门皇家赌场:计量一个数与2的n次方取模,ja

    关键词:

上一篇:没有了

下一篇:没有了