ThreadPoolの:スレッドプール

  1.定義

  スレッド領域のキャッシュ一定数。

  2、の役割

  再利用、管理スレッド、スレッドがCPUリソースを消費破壊/回避するために、新しいスレッド。

  図3に示すように、炉心パラメータ

  パラメータの役割

  corePoolSize(カーネルスレッド)カーネルスレッドは常に生きてます

  アクティブなスレッドのmaximumPoolSize(スレッドの最大数)は、スレッドの最大数に達し、その後の新たなタスクがブロックされます

  非コア糸よりkeepAliveTimeが(アイドルスレッドタイムアウト期間)は、アイドル期間は、(threadPoolExecutor.allowCoreThreadTimeOut(真)に配置された芯糸に作用する)にリサイクルされています

  ユニット(keepAliveTimeがユニット)など:TimeUnit.MILLISECONDS、TimeUnit.SECONDS

  実行格納するためのワークキュー(タスクキュー)は、()Runnableオブジェクトを提出しました

  threadFactory(スレッドファクトリ)newThread(Runnableをr)をスレッド、スレッドプールのスレッドを作成します

  4、ワークフロー

  

ここに画像を挿入説明


  5、一般的なスレッドプール

  スレッドタイプがシーンを特徴とするスレッドの数を入力します

  固定長スレッドプール(FixedThreadPool)1つの固定コア糸は、芯糸が回復しないであろうアイドル状態です。2、すべてのスレッドがアクティブなスレッドがアイドル状態になるまで、新しいタスクが待機します。3、無制限のサイズのタスクキュー。図4に示すように、タスクの蓄積は、コントロールの同時スレッドの大容量メモリの最大数を占めることができます

  タイミングスレッドプール(ScheduledThreadPool)コア、非コアマルチスレッドコア:固定され、非コア:アイドル・スレッド制限のない、非コアが回収されます。2、無制限の非コアスレッドは非常にマルチスレッドを作成してもよいです。実行タイミング/定期的なタスク

  アイドル優先スレッド処理タスクを使用して、スレッドプール(CachedThreadPool)非コア無制限1をキャッシュすることができます。2、ねじサイズは無制限です。アイドルスレッドの3,60秒回復。4、無制限の非コアスレッドは非常にマルチスレッドを作成してもよいです。実行と少ない時間のかかるタスクの数

  单线程线程池(SingleThreadExecutor)  核心线程  1个  1、任务顺序执行。2、不需要处理线程同步。3、堆积的任务可能占用大内存  单线程

  6、具体使用

  public class ExecutorDemo {

  public static void main(String[] args) {

  createThreadPoolExecutor();

  createFixedThreadPool();

  createScheduledThreadPool();

  createCachedThreadPool();

  createSingleThreadExecutor();

  }

  private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();

  private static final int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));

  private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;

  private static final int KEEP_ALIVE_SECONDS = 30;

  private static final BlockingQueue sPoolWorkQueue =

  new LinkedBlockingQueue(128);

  private static final ThreadFactory sThreadFactory = new ThreadFactory() {

  private final AtomicInteger mCount = new AtomicInteger(1);

  @Override

  public Thread newThread(Runnable r) {

  return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());

  }

  };

  public static void createThreadPoolExecutor() {

  // 1.创建自定义线程池

  ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(

  CORE_POOL_SIZE,

  MAXIMUM_POOL_SIZE,

  KEEP_ALIVE_SECONDS,

  TimeUnit.SECONDS,

  sPoolWorkQueue,

  sThreadFactory);

  threadPoolExecutor.allowCoreThreadTimeOut(true);

  // 2.创建任务

  Runnable task = new Runnable() {

  @Override

  public void run() {

  System.out.println("自定义线程池-任务执行");

  }

  };

  // 3.通过线程池执行任务

  threadPoolExecutor.execute(task);

  // 4.关闭线程池

  threadPoolExecutor.shutdown();

  }

  public static void createFixedThreadPool() {

  // 1.创建定长线程池

  // public static ExecutorService newFixedThreadPool(int var0) {

  // return new ThreadPoolExecutor(var0, var0, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue());

  // }

  ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);

  // 2.创建任务

  Runnable task = new Runnable() {

  @Override

  public void run() {

  System.out.println("定长线程池-任务执行");

  }

  };

  // 3.通过线程池执行任务

  fixedThreadPool.execute(task);

  // 4.关闭线程池

  fixedThreadPool.shutdown();

  }

  public static void createScheduledThreadPool() {

  // 1.创建定时线程池

  // public ScheduledThreadPoolExecutor(int var1) {

  // super(var1, 2147483647, 0L, TimeUnit.NANOSECONDS, new ScheduledThreadPoolExecutor.DelayedWorkQueue());

  // } 无锡妇科医院排行 http://www.0510bhyy.com/

  ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);

  // 2.创建任务

  Runnable task = new Runnable() {

  @Override

  public void run() {

  System.out.println("定时线程池-任务执行");

  }

  };

  // 3.通过线程池执行任务,execute 立即执行,schedule 延迟1s执行,scheduleAtFixedRate 延迟1s执行之后每隔2秒执行

  // scheduledThreadPool.execute(task);

  scheduledThreadPool.schedule(task, 1000L, TimeUnit.MILLISECONDS);

  // scheduledThreadPool.scheduleAtFixedRate(task,1000L,2000L, TimeUnit.MILLISECONDS);

  // 4.关闭线程池

  scheduledThreadPool.shutdown();

  }

  public static void createCachedThreadPool() {

  // 1.创建可缓存线程池

  // public static ExecutorService newCachedThreadPool() {

  // return new ThreadPoolExecutor(0, 2147483647, 60L, TimeUnit.SECONDS, new SynchronousQueue());

  // }

  ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

  // 2.创建任务

  Runnable task = new Runnable() {

  @Override

  public void run() {

  System.out.println("可缓存线程池-任务执行");

  }

  };

  // 3.通过线程池执行任务

  cachedThreadPool.execute(task);

  // 4.关闭线程池

  cachedThreadPool.shutdown();

  }

  public static void createSingleThreadExecutor() {

  // 1.创建单线程线程池

  // public static ExecutorService newSingleThreadExecutor() {

  //(て、新しいThreadPoolExecutor(1、1、0L、TimeUnit.MILLISECONDS、新しいLinkedBlockingQueue()))新しいExecutors.FinalizableDelegatedExecutorServiceを返します。

  //}

  ExecutorServiceのsingleThreadExecutor = Executors.newSingleThreadExecutor()。

  // 2.タスクを作成します。

  実行可能なタスク=新しい実行可能(){

  @オーバーライド

  ます。public void実行(){

  System.out.println(「シングルスレッドのスレッドプール - タスクの実行」)。

  }

  }。

  // 3.タスクを実行するためのスレッドプールで

  singleThreadExecutor.execute(タスク)。

  スレッドプール// 4.閉じます

  singleThreadExecutor.shutdown();

  }

  }


おすすめ

転載: blog.51cto.com/14503791/2433845