java线程池的使用

大量的创建线程,会过度消耗计算机资源,对于比较简单的任务可以使用线程池,限制过度创建线程。Java中提供大量的线程池构类,类型多种多样,包括:
(1) newCachedThreadPool
(2) newFixedThreadPool
(3)  newScheduledThreadPool
(4) newSingleThreadExecutor

操作方法

  • 01

    首先了解一下线程的创建方式: Tread类用于创建线程new Thread(),使用时必须覆盖其方法,@Overide;一下创建九个线程,并输出任务数。 代码如下 public class TestThread { public static void main(String[] args) { for(int i=1;i<10;i++){ final int task=i; new Thread(new Runnable(){ @Override public void run(){ System.out.println("task:"+task); } }).start(); } } }

  • 02

    (1)newFixedThreadPool: 创建一个固定线程数的线程池,并给线程分配任务 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 package testexcutor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestExcutor { public static void main(String[] args) { ExecutorService fixThreadPool=Executors.newFixedThreadPool(5); for(int i=1;i<=5;i++){ final int task=i; fixThreadPool.execute(new Runnable(){ @Override public void run(){ for(int j=1;j<=5;j++){ System.out.println(Thread.currentThread().getName()+"  "+"task:"+task+"times:"+j); } } }); } fixThreadPool.shutdown(); } }

  • 03

    (2)newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。示例代码如下: package testexcutor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestExcutor { public static void main(String[] args) { ExecutorService cashedThreadPool=Executors.newCachedThreadPool(); for(int i=1;i<=100;i++){ final int task=i; cashedThreadPool.execute(new Runnable(){ @Override public void run(){ for(int j=1;j<=5;j++){ System.out.println(Thread.currentThread().getName()+"  "+"task:"+task+"times:"+j); } } }); } cashedThreadPool.shutdown(); } } 创建100线程,但是由于有线程结束,所有可以回收再利用,不够使用时,再创建一个新的线程。

  • 04

    (3)  newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。 代码: import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class TsetThreads { public static void main(String[] args) { ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); scheduledThreadPool.schedule(new Runnable() { public void run() { System.out.println("delay 10 seconds"); } }, 10, TimeUnit.SECONDS); scheduledThreadPool.shutdown(); } } 创建一个线程使其延迟10秒后执行

  • 05

    (4) newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。 代码: package testexcutor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestExcutor { 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() { try { System.out.println(Thread.currentThread().getName()+" "+"task"+index); Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } }); } singleThreadExecutor.shutdown(); } } 只能创建一个线程,所以线程名一致。

  • 06

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

(0)

相关推荐

  • 关于java中的线程池

    * Executors 线程池! * 线程池的好处是:线程池里面的线程运行后并不会死亡变成垃圾,而是被线程池回收重复利用! * API:public static ExecutorService ne ...

  • Linux线程池使用

    一、线程池概述 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线 程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中 ...

  • 基于Java线程实现后台定时监控

    熟悉编写JavaScript的人,都习惯在页面写入setTimeOut来实现web页面的定时监控或事务处理.但是如何在Java服务端来实现这样一个监控机制呢?一般大家都会想到线程.但是一直以来,都没有 ...

  • JAVA线程安全:[1]浅谈JAVA内存模型

    关于java线程安全,网上有很多资料,我只想从自己的角度总结对这方面的考虑,有时候写东西是很痛苦的,知道一些东西,但想用文字说清楚,却不是那么容易.我认为要认识java线程安全,必须了解两个主要的点: ...

  • JAVA线程安全:[4]volatile关键字

    volatile是java提供的一种同步手段,只不过它是轻量级的同步,为什么这么说,因为volatile只能保证多线程的内存可见性,不能保证多线程的执行有序性.而最彻底的同步要保证有序性和可见性,例如 ...

  • java线程系列---Runnable和Thread的区别

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...

  • Java编程程序线程的四种状态

    操作方法 01 线程有四种状态,任何一个线程肯定处于这四种状态中的一种: 02 1) 产生(New):线程对象已经产生,但尚未被启动,所以无法执行.如通过new产生了一个线程对象后没对它调用start ...

  • Tomcat中应用调用Libvirt库进行控制时可能导致线程卡死问题的解决方法

    最近的项目中有用到libvirt的java包进行libvirt的远程命令调用,进行kvm的管理。我们的测试人员一个偶然的机会下测试出来,在控制连接状态的时候,可能存在一个严重的bug,由于界面上的fl ...

  • Solaris Java运行环境配置

    Java运行环境概述 JRE 是运行 Java 程序的最低的标准 Java 平台。它包含 Java 虚拟机 (JVM)、Java核心类和支持文件。使用 ''java'' 工具从命令行调用 JRE(参见 ...