java创建线程池的四种方式是:1、newcachedthreadpool创建一个可缓存线程池;2、newfixedthreadpool创建一个定长线程池;3、newscheduledthreadpool创建一个定长线程池。
java通过executors提供四种线程池,分别为:
newcachedthreadpool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newfixedthreadpool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newscheduledthreadpool 创建一个定长线程池,支持定时及周期性任务执行。
newsinglethreadexecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(fifo, lifo, 优先级)执行。
详细内容可参见博友的博客java并发编程:线程池的使用
1.newcachedthreadpool 这里的线程池是无限大的,当一个线程完成任务之后,这个线程可以接下来完成将要分配的任务,而不是创建一个新的线程。
public static void main(string[] args) { executorservice cachedthreadpool = executors.newcachedthreadpool(); for (int i = 0; i < 10; i++) { final int index = i; try { thread.sleep(10); } catch (interruptedexception e) { e.printstacktrace(); } cachedthreadpool.execute(new runnable() { public void run() { system.out.println(index); } }); } }
2.newfixedthreadpool
public static void main(string[] args) { executorservice fixedthreadpool = executors.newfixedthreadpool(3); for (int i = 0; i < 10; i++) { final int index = i; fixedthreadpool.execute(new runnable() { public void run() { try { system.out.println(index); thread.sleep(10); } catch (interruptedexception e) { e.printstacktrace(); } } }); } }
3.newscheduledthreadpoo
public static void main(string[] args) { scheduledexecutorservice scheduledthreadpool = executors.newscheduledthreadpool(5); for (int i = 0; i < 10; i++) { scheduledthreadpool.schedule(new runnable() { public void run() { system.out.println("delay 3 seconds"); } }, 3, timeunit.seconds); } }
4.newsinglethreadexecutor 按顺序来执行线程任务 但是不同于单线程,这个线程池只是只能存在一个线程,这个线程死后另外一个线程会补上
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() { /* system.out.println(index);*/ try { system.out.println(index); thread.sleep(2000); } catch (interruptedexception e) { e.printstacktrace(); } } }); } }
推荐教程: 《java教程》
以上就是java创建线程池的四种方式是什么的详细内容。