线程池2--创建线程

一.
1.java四中线程池的使用

java通过Excutors提供四种线程池,分别为:
newCacheThreadPool():创建一个可缓存的线程池,如果线程池大小超过处理需要,可灵活回收空闲线程,若无空闲线程,则新建线程。
newFixedThreadPool():创建一个定长的线程池,可控制线程最大并发数,超出的线程会在队列中排队。
newScheduledThreadPool():创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor():创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有的任务按照制定的顺序(FIFO,LIFO,优先级)执行。

二.
public static void main(String[] args) {

// 1.线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。
//
// ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
//
// for (int i = 0; i < 10; i++) {
//
// final int index = i;
//
// try {
// Thread.sleep(index * 100);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//
// cachedThreadPool.execute(new Runnable() {
//
// @Override
// public void run() {
// System.out.println(index);
// System.out.println(cachedThreadPool);
// }
//
// });
// }

/**
* 2.指定线程池的大小,如果指定线程池大小为5,而请求总数为100,那么前五个的顺序一般会是乱的,因为第一次进入线程池的有五个值,池中的五个线程拿到哪个执行哪个,之后
* 哪个线程执行完则继续按队列的顺序去抓取任务,所以前面的一般是乱的,后面基本会按顺序输入---线程池大小为100,任务有100,后面的基本还在后面,前面的还在前面,因为
* 线程的抓取是按顺序去随机抓取的
*/
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(100);
for (int i = 0; i < 100; i++) {
final int index = i;
fixedThreadPool.execute(new Runnable() {

@Override
public void run() {
try {
System.out.println(index);
Thread.sleep(2000);

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}

// 3.1定时执行 先睡一秒,之后的睡三秒 scheduleAtFixedRate
// ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
// scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
//
// @Override
// public void run() {
//
// System.out.println("delay 3 seconds");
//
// }
// }, 1, 3, TimeUnit.SECONDS);

3.2--睡三秒后执行 schedule
public static void main(String[] args) {

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
public void run() {
System.out.println("delay 3 seconds");
}
}, 3, TimeUnit.SECONDS);
}


//4.创建单线程
// ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
// for (int i = 0; i < 10; i++) {
// final int index = i;
// singleThreadExecutor.execute(new Runnable() {
//
// @Override
// public void run() {
// try {
// System.out.println(index);
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// });
// }

原文地址:https://www.cnblogs.com/tian666/p/7845282.html