这个不是考的线程池如何复用线程么?是限时时间的无限循环,限时的实现:google
的实现方式是阻塞队列的poll()
,无限循环在线程的代码里面就是getTask()
。
两者的结合过程是这样:多个空闲线程通过getTask()
无限循环阻塞队列,若未取得队列中的任务,会调用阻塞队列的方法poll(long timeout, TimeUnit unit)
,含义就是阻塞队列等待timeout若没有任务,该空间线程再退出。如果在0-timeout时间内有任务来到,此时,空闲线程就能直接执行任务,由于是阻塞队列,所以是线程安全的。只会有一个线程争抢到任务