java 并发连接池_Java并发:Executor与连接池

概述

首先来说一说java连接池中常用到的几个类:Executor,ExecutorService,ScheduledExecutorService

Executor

执行已经提交的任务对象。此接口提供了将任务提交和任务执行分离的机制。

ExecutorService

它是Executor的子接口,可以终止提交新的线程任务,可以中式线程池里现有的所有线程,还可以批量提交线程任务等。它的方法有很多,可以详细阅读相关的api。

ScheduledExecutorService

可延时执行线程任务

本文中案例中的线程实现如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public class ThreadDemo implementsRunnable{private String threadName = null;private boolean flag = true;private intcount;private intcounter;private longsuspend;/*** This is the constructor

*@paramthreadName

*@paramcount 循环次数

*@paramsuspend 线程终端时间,单位毫秒*/

public ThreadDemo(String threadName, int count, longsuspend) {super();this.threadName =threadName;this.count =count;this.suspend =suspend;

}/*** run*/@Overridepublic voidrun() {while(flag) {try{

Thread.sleep(suspend);

System.out.println(threadName+"--------------"+counter);

counter++;if(counter>count){

flag= false;

}

}catch(InterruptedException e) {

e.printStackTrace();

}

}

}

}

View Code

创建一个无限大的线程池

ExecutorService executorService1 =Executors.newCachedThreadPool();

executorService1.execute(new ThreadDemo("线程B-1", 5, 200));

executorService1.execute(new ThreadDemo("线程B-2", 5, 200));

executorService1.shutdown();

executorService1.shutdown()作用是拒绝接收其它的线程,在线程池里的线程都执行完后,关闭线程池。

创建一个特定大小的线程池

ExecutorService executorService1 = Executors.newFixedThreadPool(2);

executorService1.submit(new ThreadDemo("线程B-1", 5, 200));

executorService1.submit(new ThreadDemo("线程B-2", 5, 200));

executorService1.submit(new ThreadDemo("线程B-3", 5, 200));

executorService1.shutdown();

这里创建的线程池大小为2,若是提交的线程个数大于2,多余的则会在队列里等候

创建一个单线程执行的线程池

ExecutorService executorService1 =Executors.newSingleThreadExecutor();

executorService1.execute(new ThreadDemo("线程A-1", 5, 200));

executorService1.execute(new ThreadDemo("线程A-2", 5, 200));

executorService1.shutdown();

可提交多个线程,但一次只运行一个线程,其它的在队列里等待

创建延迟执行线程的的线程池

ScheduledExecutorService executorService1 = Executors.newScheduledThreadPool(2);

executorService1.schedule(new ThreadDemo("线程B-1", 5, 500),1,TimeUnit.SECONDS);

executorService1.schedule(new ThreadDemo("线程B-2", 5, 500),2,TimeUnit.SECONDS);

executorService1.schedule(new ThreadDemo("线程B-3", 5, 500),3,TimeUnit.SECONDS);

executorService1.shutdown();

关于Executors.newScheduledThreadPool(int corePoolSize)中的corePoolSize:当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其他空闲的基本线程能够执行新任务也会创建线程,等到需要执行的任务数大于线程池基本大小时就不再创建。如果调用了线程池的prestartAllCoreThreads方法,线程池会提前创建并启动所有基本线程。

创建定时单线程池

ScheduledExecutorService executorService1 =Executors.newSingleThreadScheduledExecutor();

executorService1.schedule(new ThreadDemo("线程A-1", 5, 500),1,TimeUnit.SECONDS);

executorService1.schedule(new ThreadDemo("线程A-2", 5, 500),2,TimeUnit.SECONDS);

executorService1.shutdown();

每个类有什么方法,看具体的api,以上只是语法范例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值