2019-03-12 15:05:10 1024浏览
今天扣丁学堂Java培训老师给大家介绍一下关于Java四种常用线程池的详细介绍,希望对同学们学习Java开发有所帮助,下面我们一起来看一下吧。
package com.study.test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
//创建一个可缓存线程池
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
try {
//sleep可明显看到使用的是线程池里面以前的线程,没有创建新的线程
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
cachedThreadPool.execute(new Runnable() {
public void run() {
//打印正在执行的缓存线程信息
System.out.println(Thread.currentThread().getName()+"正在被执行");
}
});
}
}
}
pool-1-thread-1正在被执行 pool-1-thread-1正在被执行 pool-1-thread-1正在被执行 pool-1-thread-1正在被执行 pool-1-thread-1正在被执行 pool-1-thread-1正在被执行 pool-1-thread-1正在被执行 pool-1-thread-1正在被执行 pool-1-thread-1正在被执行 pool-1-thread-1正在被执行
package com.study.test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
//创建一个可重用固定个数的线程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
fixedThreadPool.execute(new Runnable() {
public void run() {
try {
//打印正在执行的缓存线程信息
System.out.println(Thread.currentThread().getName()+"正在被执行");
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
}
pool-1-thread-1正在被执行 pool-1-thread-2正在被执行 pool-1-thread-3正在被执行 pool-1-thread-1正在被执行 pool-1-thread-2正在被执行 pool-1-thread-3正在被执行 pool-1-thread-1正在被执行 pool-1-thread-2正在被执行 pool-1-thread-3正在被执行 pool-1-thread-1正在被执行
package com.study.test;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
//创建一个定长线程池,支持定时及周期性任务执行——延迟执行
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
//延迟1秒执行
scheduledThreadPool.schedule(new Runnable() {
public void run() {
System.out.println("延迟1秒执行");
}
}, 1, TimeUnit.SECONDS);
}
}
延迟1秒执行
package com.study.test;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
//创建一个定长线程池,支持定时及周期性任务执行——定期执行
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
//延迟1秒后每3秒执行一次
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("延迟1秒后每3秒执行一次");
}
}, 1, 3, TimeUnit.SECONDS);
}
}
延迟1秒后每3秒执行一次 延迟1秒后每3秒执行一次 .............
package com.study.test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestThreadPoolExecutor {
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() {
public void run() {
try {
//结果依次输出,相当于顺序执行各个任务
System.out.println(Thread.currentThread().getName()+"正在被执行,打印的值是:"+index);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
}
pool-1-thread-1正在被执行,打印的值是:0 pool-1-thread-1正在被执行,打印的值是:1 pool-1-thread-1正在被执行,打印的值是:2 pool-1-thread-1正在被执行,打印的值是:3 pool-1-thread-1正在被执行,打印的值是:4 pool-1-thread-1正在被执行,打印的值是:5 pool-1-thread-1正在被执行,打印的值是:6 pool-1-thread-1正在被执行,打印的值是:7 pool-1-thread-1正在被执行,打印的值是:8 pool-1-thread-1正在被执行,打印的值是:9
package com.study.test;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
class TempThread implements Runnable {
@Override
public void run() {
// 打印正在执行的缓存线程信息
System.out.println(Thread.currentThread().getName() + "正在被执行");
try {
// sleep一秒保证3个任务在分别在3个线程上执行
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class TestThreadPoolExecutor {
public static void main(String[] args) {
// 创建数组型缓冲等待队列
BlockingQueue<Runnable> bq = new ArrayBlockingQueue<Runnable>(10);
// ThreadPoolExecutor:创建自定义线程池,池中保存的线程数为3,允许最大的线程数为6
ThreadPoolExecutor tpe = new ThreadPoolExecutor(3, 6, 50, TimeUnit.MILLISECONDS, bq);
// 创建3个任务
Runnable t1 = new TempThread();
Runnable t2 = new TempThread();
Runnable t3 = new TempThread();
// Runnable t4 = new TempThread();
// Runnable t5 = new TempThread();
// Runnable t6 = new TempThread();
// 3个任务在分别在3个线程上执行
tpe.execute(t1);
tpe.execute(t2);
tpe.execute(t3);
// tpe.execute(t4);
// tpe.execute(t5);
// tpe.execute(t6);
// 关闭自定义线程池
tpe.shutdown();
}
}
pool-1-thread-1正在被执行 pool-1-thread-2正在被执行 pool-1-thread-3正在被执行
【关注微信公众号获取更多学习资料】