开发教程您现在的位置:主页 > 开发教程 >

自定义的线程池及其异步处理

发布日期:2018-01-19 09:16

线程池是一种多线程的处理方式,可以主动添加到队列,西安Java培训则总结了相关的知识来供参考。
什么是线程池?
线程池是一种多线程处理方式,处理过程中将使命添加到行列,然后在创立线程后主动发动这些使命。线程池线程都是后台线程。每个线程都运用默许的库房巨细,以默许的优先级运行,并处于多线程单元中。假如某个线程在保管代码中闲暇(如正在等候某个事件),则线程池将刺进另一个辅佐线程来使一切处理器坚持繁忙。假如一切线程池线程都始终坚持繁忙,但行列中包括挂起的工作,则线程池将在一段时间后创立另一个辅佐线程但线程的数目永远不会超越最大值。超越最大值的线程能够排队,但他们要等到其他线程完成后才发动。
什么是异步处理?
一个能够无需等候被调用函数的返回值就让操作继续进行的办法
完成
1.创立ThreadPoolConfig类,留意,需符号@EnableAsync
@Configuration@EnableAsyncpublic class ThreadPoolConfig {
  //其他
}
2.界说defaultThreadPool
  @Bean
  public Executor defaultThreadPool() {
    ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler();
    executor.setPoolSize(线程巨细);
    executor.setThreadPriority(优先级);
    executor.setThreadNamePrefix(称号前缀);
    executor.initialize();
    return executor;
  }
3.编写异步测验办法,留意,需符号@Async
  @Async
  public Futureasync() throws InterruptedException {
    final long time = 5000;
    Thread.sleep(time);
    return new AsyncResult<>("job done");
  }
4.调用异步办法(如无需获取返回值的话,可直接调用),这儿的样例是等候异步办法履行,然后取得返回值的场景
  public String asyncWait() throws InterruptedException, ExecutionException {
    Futuremsg = demoService.async();
    final long time = 10000;
    while (true) {
      if (msg.isDone()) {
        break;
      }
      Thread.sleep(time);
    }
    return msg.get();
  }
代码库房 
结束
异步调用,供给了一种非阻塞方式的办法调用,在无需当即得到返回值的场景下,有助于进步系统的并发才能.