Java线程池的使用实例

  介绍

这篇文章主要讲解了“Java线程池的使用实例”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java线程池的使用实例”吧!

第一种:创建一个定长的线程池,控制线程最大并发数,超出的会在队列中等待。

TestThreadPool.java

 import  java.util.concurrent.ExecutorService;
  import  java.util.concurrent.Executors;
  
  public  class  TestThreadPool  {
  ,,,public  static  void  main (String [], args), {
  ,,,,,,,long  startTime =, System.currentTimeMillis(),,,,,//获取开始时间
  ,,,,,,,ExecutorService  fixedThreadPool =, Executors.newFixedThreadPool(5);//设置线程池的最大线程数
  ,,,,,,,for  (int 小姐:=,0;,小姐:& lt;, 10;,我+ +),{
  ,,,,,,,,,,,final  int  index =,我。//一般多线程并发都用决赛
  ,,,,,,,,,,,fixedThreadPool.execute (new  Runnable (), {
  ,,,,,,,,,,,,,,,public  void 运行(),{
  ,,,,,,,,,,,,,,,,,,,System.out.println (index  +,,,,,, +, Thread.currentThread () . getname ());
  ,,,,,,,,,,,,,,,}
  ,,,,,,,,,,,});
  ,,,,,,,}
  ,,,,,,,long  endTime =, System.currentTimeMillis(),,,,,//获取结束时间
  ,,,,,,,System.out.println(“程序运行时间:“,+,(endTime 安康;开始时间),+,“ms");
  ,,,}
  }

输出结果:,,,,癑ava线程池的使用实例”,(当然输出结果不是固定的,不过线程数一定不会超过5个)

可以看到Thread.currentThread () . getname()拿的到的名字只有5种,说明最大线程数控制在5个

工作队列用了LinkedBlockingQueue,无界队列,当任务多而线程数少时,任务会存在队列里,容易内存溢出。

第二种:创建一个可缓存的线程池,可以灵活回收空闲线程,若无可回收,则新建线程。

TestThreadPool1.java

 import  java.util.concurrent.ExecutorService;
  import  java.util.concurrent.Executors;
  public  class  TestThreadPool1  {
  ,,,public  static  void  main (String [], args), {
  ,,,,,,,ExecutorService  cachedThreadPool =, Executors.newCachedThreadPool ();
  ,,,,,,,for  (int 小姐:=,0;,小姐:& lt;, 10000;,我+ +),{
  ,,,,,,,,,,,final  int  index =,我;
  ,,,,,,,,,,,cachedThreadPool.execute (new  Runnable (), {
  ,,,,,,,,,,,,,,,public  void 运行(),{
  ,,,,,,,,,,,,,,,,,,,System.out.println (index  +,,,,,, +, Thread.currentThread () . getname ());
  ,,,,,,,,,,,,,,,}
  ,,,,,,,,,,,});
  ,,,,,,,}
  ,,,}
  }

输出结果的Thread.currentThread () . getname()拿的到的名字有一两千种(当然不同环境和配置的机器的结果最大线程数是不同的)

工作队列使用SynchronousQueue同步队列。会根据任务数创建线程,数量太大容易导致cpu使用率100%,

第99%三种:创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行。

TestThreadPool2.java

 import  java.util.concurrent.ExecutorService;
  import  java.util.concurrent.Executors;
  public  class  TestThreadPool2  {
  ,,,public  static  void  main (String [], args), {
  ,,,,,,,ExecutorService  singleThreadExecutor =, Executors.newSingleThreadExecutor ();
  ,,,,,,,for  (int 小姐:=,0;,小姐:& lt;, 10000;,我+ +),{
  ,,,,,,,,,,,final  int  index =,我;
  ,,,,,,,,,,,singleThreadExecutor.execute (new  Runnable (), {
  ,,,,,,,,,,,,,,,public  void 运行(),{
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

Java线程池的使用实例