并发(1)

并发快,一个是快在抢占更多处理器资源上,主要体现在多处理器机器运行并发程序。另外是减少没必要的同步等待,比如等待IO等。

Executor是一个接口只有一个方法execute(Runnable)

ExecutorService实现Executor接口并且加入其它方法submit,shutdown等

ThreadPoolExecutor是一个ExecutorService,其构造函数最长的参数列表有7个,以下把线程池资源比作公司岗位,线程比作员工

1、int corePoolSize核心骨干元老级别岗位个数,不用担心

2、int maximunPoolSize公司最多容纳多少人,再多的就不让进了,毕竟公司也是有预算的。

3、4、long keepAliveTime,TimeUnit unit公司对不干活的非元老级别员工的容忍期限,毕竟公司不养闲人。

5、BlockingQueue<Runnable> workQueue人力资源系统,用来调配调度人力资源的

6、ThreadFactory threadFactory,统一入职培训,学习基本技能啊,公司文化洗洗脑啊之类的

7、RejectedExecutionHandler handler: the handler to use when execution is blocked because the thread bounds and queue capacities are reached

 

Executors提供了几个静态方法产生ThreadPoolExecutor,有三个套路

newCachedThreadPool:核心数0-Integer.MAX_VALUE,存活时间60s,SynchronousQueue

newFixedThreadPool(int n):核心数n-n,显然这种情况下存活时间没有意义,LinkedBlockingQueue

newSingleThreadExecutor:核心1-1,其他同上。(多装饰了一个类,暂不细究)

他们都可以增加一个ThreadFactory 参数。

 

Daemon线程不能阻止JVM退出,如果系统中只剩下Daemon线程在运行的话,JVM会退出的。

子线程未被捕获的异常不会被父线程捕获,可以通过设置Thread的静态属性defaultUncaughtExceptionHandler来进行全局处理方案设置,也可以在子线程对象上setuncaughtExceptionHandler来针对性设置异常处理。

 

posted @ 2017-07-10 17:56  剑侠飞蓬  阅读(110)  评论(0编辑  收藏  举报