Java通过Executors提供四种线程池

Java通过Executors提供四种线程池

 

java通过Executors提供四种线程池

 

  1. newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,
    可灵活回收空闲线程,若无法回收,则新建线程。
  2. NewFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
  3. NewScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务。
  4. newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按指定顺序执行(FIFO,LIFO,优先级)。

 

public class newCachedThreadPoolDm {

 

/**

 * 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程, 若无可回收, 新建线程

 * @param args

 */

public static void main(String[] args) {

ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();

for (int i = 0; i < 10; i++) {

final int index = i;

try {

Thread.sleep(index * 1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// 线程池为无限大,当执行第二个任务时,第一个任务已经完成, 会复用执行第一个任务线程,而不用每次新建线程

newCachedThreadPool.execute(new Runnable() {

 

@Override

public void run() {

System.out.println("index == :" + index);

 

}

});

}

 

}

 

}

public class newFixedThreadPool {

 

/**

 * 创建一个定长线程池,可控制线程最大并发数, 超出的线程会在队列中等待。

 * 因为线程池大小为3, 每个任务输出index后sleep 2秒,所以每2秒打印3个数字。

 * @param args

 */

public static void main(String[] args) {

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);

for (int i = 0; i < 10; i++) {

final int index = 1;

fixedThreadPool.execute(new Runnable() {

 

@Override

public void run() {

System.out.println(index);

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

}

 

}

 

}

 

public class newScheduledThreadPool {

/**

 *

 * @param args

 */

public static void main(String[] args) {

ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(5);

newScheduledThreadPool.scheduleAtFixedRate(new Runnable() {

 

@Override

public void run() {

System.out.println("=======newScheduledThreadPool========");

 

}

}, 1, 3, TimeUnit.SECONDS);

}

}

public class newSingleThreadExecutor {

 

/**

 * 创建一个单线程化的线程池, 它只会用唯一的工作线程来执行任务,保证所有任务按照执行顺序(FIFO,LIFO,优先级)执行

 * @param args

 */

public static void main(String[] args) {

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

for (int i = 0; i < 10; i++) {

final int index = i;

singleThreadExecutor.execute(new Runnable() {

 

@Override

public void run() {

System.out.println(index);

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

}

}

}

 

public class singleThreadExecutor {

/**

 * 可以使用jdk自带的监控工具来监控我们创建的线程数量

 * jdk1.8.0_162.jdk/Contents/Home/bin/jconsole

 * 运行一个不终止的线程,创建指定量的线程

 * @param args

 */

public static void main(String[] args) {

ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();

for (int i = 0; i < 10; i++) {

final int index = i;

newCachedThreadPool.execute(new Runnable() {

 

@Override

public void run() {

while (true) {

try {

System.out.println("-----1-----" + index);

Thread.sleep(10*1000);

} catch (InterruptedException e) {

 

e.printStackTrace();

}

}

}

});

try {

Thread.sleep(500);

System.out.println("----2----");

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

}

 

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值