这种思路是没问题的,但是这段代码是存在问题的,有哪些问题呢?下面我们就来看看有哪些问题;
创建销毁线程资源消耗;我们使用线程的目的本是出于效率考虑,可以为了创建这些线程却消耗了额外的时间,资源,对于线程的销毁同样需要系统资源。
cpu资源有限,上述代码创建线程过多,造成有的任务不能即时完成,响应时间过长。
线程无法管理,无节制地创建线程对于有限的资源来说似乎成了“得不偿失”的一种作用。
既然我们上面使用手动创建线程会存在问题,那有解决方法吗?
答案:有的,使用线程池。
线程池介绍
线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销。
线程池有什么优点?
降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
提高线程的可管理性。
线程池使用
在JDK中rt.jar包下JUC(java.util.concurrent)创建线程池有两种方式:ThreadPoolExecutor 和 Executors,其中 Executors又可以创建 6 种不同的线程池类型。
ThreadPoolExecutor 的使用
线程池使用代码如下:
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadPoolDemo {
private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10, 10L, TimeUnit.SECONDS, new LinkedBlockingQueue(100));
public static void main(String[] args) {
threadPoolExecutor.execute(new Runnable() {
@Override
public void run() {
System.out.println("田先生您好");
}
});
}
}
以上程序执行结果如下: