2018年1月21日

时间:2021-01-19 13:52:24

concurrent包是什么

在JDK1.5出现之后,Sun推出了java.util.concurrent工具包以简化并发完成。开发者们借助于此,将有效的减少竞争条件(race conditions)和死锁线程。concurrent包为我们提供了更实用的并发程序模型。

java.util.concurrent下主要的接口和类:

  • Executor:具体Runnable任务的执行者。
  • ExecutorService:一个线程池管理者,其实现类有多种,比如普通线程池,定时调度线程池ScheduledExecutorService等,我们能把一个Runnable,Callable提交到池中让其调度。
  • Future:是与Runnable,Callable进行交互的接口,比如一个线程执行结束后取返回的结果等等,还提供了cancel终止线程。
  • BlockingQueue:阻塞队列。

concurrent包优点在于

  • 它是功能强大且标准化的类库,实现了很多java thread原生api很费时才能实现的功能。
  • 已经过测试,代码质量有保证,相较自己写代码处理thread,节约了大量的测试时间。
  • 性能上已经过优化,比如以前通过synchronized在并发量大的时候性能会不好,而concurrent大量用到了非阻塞算法,尽量少用锁减少等待时间。

模板方法设计模式

定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。

通俗些讲

在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,又该类的子类去完成。

采用模板方法设计模式的好处

  • 封装不变部分,扩展可变部分。把认为不变部分的算法封装到父类中实现,而可变部分的则可以通过继承来继续扩展。
  • 提取公共部分代码,便于维护。
  • 行为由父类控制,子类实现。

分布式实时搜索和分析引擎ElasticSearch

Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎。当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

Elasticsearch是如何做到快速索引的

排序压缩算法,更快的IO处理
https://www.jianshu.com/p/ed7e1ebb2fb7