设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

关于线程池你不能不知道的东西(3)

发布时间:2019-07-08 11:53 所属栏目:21 来源:儒雅程序员
导读:然后模拟运行: publicstaticvoidmain(String[]args)throwsException{ CommandOrdercommandPhone=newCommandOrder(手机); CommandOrdercommand=newCommandOrder(电视); //阻塞方式执行 Stringexecute=commandPhone.

然后模拟运行:

  1. public static void main(String[] args) throws Exception { 
  2.  CommandOrder commandPhone = new CommandOrder("手机"); 
  3.  CommandOrder command = new CommandOrder("电视"); 
  4.  //阻塞方式执行 
  5.  String execute = commandPhone.execute(); 
  6.  LOGGER.info("execute=[{}]", execute); 
  7.  //异步非阻塞方式 
  8.  Future queue = command.queue(); 
  9.  String value = queue.get(200, TimeUnit.MILLISECONDS); 
  10.  LOGGER.info("value=[{}]", value); 
  11.  CommandUser commandUser = new CommandUser("张三"); 
  12.  String name = commandUser.execute(); 
  13.  LOGGER.info("name=[{}]", name); 
  14.  } 

运行结果:

干货:关于线程池你不能不知道的东西

可以看到两个任务分成了两个线程池运行,他们之间互不干扰。

获取任务任务结果支持同步阻塞和异步非阻塞方式,可自行选择。

它的实现原理其实容易猜到:

利用一个 Map 来存放不同业务对应的线程池。

通过刚才的构造函数也能证明:

干货:关于线程池你不能不知道的东西

还要注意的一点是:

自定义的 Command 并不是一个单例,每次执行需要 new 一个实例,不然会报 This instance can only be executed once. Please instantiate a new instance. 异常。

总结

池化技术确实在平时应用广泛,熟练掌握能提高不少效率。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读