华南俳烁实业有限公司

java

當(dāng)前位置:中華考試網(wǎng) >> java >> java基礎(chǔ) >> 文章內(nèi)容

使用Executors創(chuàng)建和管理線程

來(lái)源:中華考試網(wǎng)  [2020年12月3日]  【

  1. 類 Executors

  此類中提供的一些方法有:

  1.1 public static ExecutorService newCachedThreadPool()

  創(chuàng)建一個(gè)可根據(jù)需要?jiǎng)?chuàng)建新線程的線程池,但是在以前構(gòu)造的線程可用時(shí)將重用它們。對(duì)于執(zhí)行很多短期異步任務(wù)的程序而言,這些線程池通常可提高程序性能。

  1.2 public static ExecutorService newFixedThreadPool(int nThreads)

  創(chuàng)建一個(gè)可重用固定線程數(shù)的線程池,以共享的無(wú)界隊(duì)列方式來(lái)運(yùn)行這些線程。

  1.3 public static ExecutorService newSingleThreadExecutor()

  創(chuàng)建一個(gè)使用單個(gè) worker 線程的 Executor,以無(wú)界隊(duì)列方式來(lái)運(yùn)行該線程。

  這三個(gè)方法都可以配合接口ThreadFactory的實(shí)例一起使用。并且返回一個(gè)ExecutorService接口的實(shí)例。

  填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽java課程!害怕學(xué)不會(huì)?助教陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國(guó)推薦就業(yè)!

java課程免費(fèi)學(xué)習(xí),高薪觸手可得

  • 地區(qū):
  • 姓名:
  • 手機(jī):

  2. 接口 ThreadFactory

  根據(jù)需要?jiǎng)?chuàng)建新線程的對(duì)象。使用線程工廠就無(wú)需再手工編寫對(duì) new Thread 的調(diào)用了,從而允許應(yīng)用程序使用特殊的線程子類、屬性等等。

  此接口最簡(jiǎn)單的實(shí)現(xiàn)就是:

  class SimpleThreadFactory implements ThreadFactory {

  public Thread newThread(Runnable r) {

  return new Thread(r);

  }

  }

  3. 接口ExecutorService

  該接口提供了管理終止的方法。

  4.創(chuàng)建標(biāo)準(zhǔn)線程池啟動(dòng)線程

  4.1 提供一個(gè)簡(jiǎn)單的實(shí)現(xiàn)Runnable接口的線程

  MyThread.java

  package com.zj.concurrency.executors;

  public class MyThread implements Runnable {

  private int count = 1, number;

  public MyThread(int num) {

  number = num;

  System.out.println("Create Thread-" + number);

  }

  public void run() {

  while (true) {

  System.out.println("Thread-" + number + " run " + count+" time(s)");

  if (++count == 3)

  return;

  }

  }

  }

  這個(gè)線程會(huì)打印出相應(yīng)的創(chuàng)建和執(zhí)行信息。

  4.2使用CachedThreadPool啟動(dòng)線程

  CachedThreadPool.java

  package com.zj.concurrency.executors;

  import java.util.concurrent.ExecutorService;

  import java.util.concurrent.Executors;

  public class CachedThreadPool {

  public static void main(String[] args) {

  ExecutorService exec = Executors.newCachedThreadPool();

  for (int i = 0; i < 5; i++)

  exec.execute(new MyThread(i));

  exec.shutdown();

  }

  }

  結(jié)果:

  Create Thread-0

  Create Thread-1

  Create Thread-2

  Create Thread-3

  Thread-0 run 1 time(s)

  Thread-0 run 2 time(s)

  Thread-1 run 1 time(s)

  Thread-1 run 2 time(s)

  Thread-2 run 1 time(s)

  Thread-2 run 2 time(s)

  Create Thread-4

  Thread-4 run 1 time(s)

  Thread-4 run 2 time(s)

  Thread-3 run 1 time(s)

  Thread-3 run 2 time(s)

  4.3 使用FixedThreadPool啟動(dòng)線程

  FixedThreadPool.java

  package com.zj.concurrency.executors;

  import java.util.concurrent.ExecutorService;

  import java.util.concurrent.Executors;

  public class FixedThreadPool {

  public static void main(String[] args) {

  ExecutorService exec = Executors.newFixedThreadPool(2);

  for (int i = 0; i < 5; i++)

  exec.execute(new MyThread(i));

  exec.shutdown();

  }

  }

  結(jié)果:

  Create Thread-0

  Create Thread-1

  Create Thread-2

  Create Thread-3

  Create Thread-4

  Thread-0 run 1 time(s)

  Thread-0 run 2 time(s)

  Thread-2 run 1 time(s)

  Thread-2 run 2 time(s)

  Thread-3 run 1 time(s)

  Thread-3 run 2 time(s)

  Thread-4 run 1 time(s)

  Thread-4 run 2 time(s)

  Thread-1 run 1 time(s)

  Thread-1 run 2 time(s)

  4.4 使用SingleThreadExecutor啟動(dòng)線程

  SingleThreadExecutor.java

  package com.zj.concurrency.executors;

  import java.util.concurrent.ExecutorService;

  import java.util.concurrent.Executors;

  public class SingleThreadExecutor {

  public static void main(String[] args) {

  ExecutorService exec = Executors.newSingleThreadExecutor();

  for (int i = 0; i < 5; i++)

  exec.execute(new MyThread(i));

  exec.shutdown();

  }

  }

  結(jié)果:

  Create Thread-0

  Create Thread-1

  Create Thread-2

  Create Thread-3

  Create Thread-4

  Thread-0 run 1 time(s)

  Thread-0 run 2 time(s)

  Thread-1 run 1 time(s)

  Thread-1 run 2 time(s)

  Thread-2 run 1 time(s)

  Thread-2 run 2 time(s)

  Thread-3 run 1 time(s)

  Thread-3 run 2 time(s)

  Thread-4 run 1 time(s)

  Thread-4 run 2 time(s)

  5.配合ThreadFactory接口的使用

  我們?cè)噲D給線程加入daemon和priority的屬性設(shè)置。

  5.1設(shè)置后臺(tái)線程屬性

  DaemonThreadFactory.java

  package com.zj.concurrency.executors.factory;

  import java.util.concurrent.ThreadFactory;

  public class DaemonThreadFactory implements ThreadFactory {

  public Thread newThread(Runnable r) {

  Thread t = new Thread(r);

  t.setDaemon(true);

  return t;

  }

  }

  5.2 設(shè)置優(yōu)先級(jí)屬性

  最高優(yōu)先級(jí)MaxPriorityThreadFactory.java

  package com.zj.concurrency.executors.factory;

  import java.util.concurrent.ThreadFactory;

  public class MaxPriorityThreadFactory implements ThreadFactory {

  public Thread newThread(Runnable r) {

  Thread t = new Thread(r);

  t.setPriority(Thread.MAX_PRIORITY);

  return t;

  }

  }

  最低優(yōu)先級(jí)MinPriorityThreadFactory.java

  package com.zj.concurrency.executors.factory;

  import java.util.concurrent.ThreadFactory;

  public class MinPriorityThreadFactory implements ThreadFactory {

  public Thread newThread(Runnable r) {

  Thread t = new Thread(r);

  t.setPriority(Thread.MIN_PRIORITY);

  return t;

  }

  }

  5.3啟動(dòng)帶有屬性設(shè)置的線程

  ExecFromFactory.java

  package com.zj.concurrency.executors;

  import java.util.concurrent.ExecutorService;

  import java.util.concurrent.Executors;

  import com.zj.concurrency.executors.factory.DaemonThreadFactory;

  import com.zj.concurrency.executors.factory.MaxPriorityThreadFactory;

  import com.zj.concurrency.executors.factory.MinPriorityThreadFactory;

  public class ExecFromFactory {

  public static void main(String[] args) throws Exception {

  ExecutorService defaultExec = Executors.newCachedThreadPool();

  ExecutorService daemonExec = Executors

  .newCachedThreadPool(new DaemonThreadFactory());

  ExecutorService maxPriorityExec = Executors

  .newCachedThreadPool(new MaxPriorityThreadFactory());

  ExecutorService minPriorityExec = Executors

  .newCachedThreadPool(new MinPriorityThreadFactory());

  for (int i = 0; i < 10; i++)

  daemonExec.execute(new MyThread(i));

  for (int i = 10; i < 20; i++)

  if (i == 10)

  maxPriorityExec.execute(new MyThread(i));

  else if (i == 11)

  minPriorityExec.execute(new MyThread(i));

  else

  defaultExec.execute(new MyThread(i));

  }

  }

  結(jié)果:

  Create Thread-0

  Create Thread-1

  Create Thread-2

  Create Thread-3

  Thread-0 run 1 time(s)

  Thread-0 run 2 time(s)

  Thread-1 run 1 time(s)

  Thread-1 run 2 time(s)

  Thread-2 run 1 time(s)

  Thread-2 run 2 time(s)

  Create Thread-4

  Thread-4 run 1 time(s)

  Thread-4 run 2 time(s)

  Create Thread-5

  Thread-5 run 1 time(s)

  Thread-5 run 2 time(s)

  Create Thread-6

  Create Thread-7

  Thread-7 run 1 time(s)

  Thread-7 run 2 time(s)

  Create Thread-8

  Thread-8 run 1 time(s)

  Thread-8 run 2 time(s)

  Create Thread-9

  Create Thread-10

  Thread-10 run 1 time(s)

  Thread-10 run 2 time(s)

  Create Thread-11

  Thread-9 run 1 time(s)

  Thread-9 run 2 time(s)

  Thread-6 run 1 time(s)

  Thread-6 run 2 time(s)

  Thread-3 run 1 time(s)

  Thread-3 run 2 time(s)

  Create Thread-12

  Create Thread-13

  Create Thread-14

  Thread-12 run 1 time(s)

  Thread-12 run 2 time(s)

  Thread-13 run 1 time(s)

  Thread-13 run 2 time(s)

  Create Thread-15

  Thread-15 run 1 time(s)

  Thread-15 run 2 time(s)

  Create Thread-16

  Thread-16 run 1 time(s)

  Thread-16 run 2 time(s)

  Create Thread-17

  Create Thread-18

  Create Thread-19

  Thread-14 run 1 time(s)

  Thread-14 run 2 time(s)

  Thread-17 run 1 time(s)

  Thread-17 run 2 time(s)

  Thread-18 run 1 time(s)

  Thread-18 run 2 time(s)

  Thread-19 run 1 time(s)

  Thread-19 run 2 time(s)

  Thread-11 run 1 time(s)

  Thread-11 run 2 time(s)

  如果你現(xiàn)在想學(xué)習(xí)Java,贏取高薪工作機(jī)會(huì),非常簡(jiǎn)單,填寫下面信息,學(xué)好Java技術(shù)高薪工作機(jī)會(huì)唾手可得。

責(zé)編:fushihao
  • 會(huì)計(jì)考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語(yǔ)考試
  • 學(xué)歷考試
巢湖市| 康平县| 从江县| 北川| 奎屯市| 商都县| 柞水县| 梁河县| 天津市| 宜川县| 长丰县| 景宁| 乌拉特中旗| 罗城| 青田县| 桂平市| 宕昌县| 西乌珠穆沁旗| 新龙县| 喀喇| 香河县| 沈阳市| 改则县| 申扎县| 台东县| 波密县| 铜梁县| 三原县| 瑞昌市| 马鞍山市| 巍山| 当雄县| 安义县| 新乐市| 迭部县| 丰城市| 韶关市| 六枝特区| 宽城| 泾川县| 布拖县|