Java併發程式設計的不同方法


在Java中,併發程式設計是一種允許在單個處理器或多個處理器上同時執行多個任務或程序的技術。它可以提高應用程式的效能和響應速度。但是,它也為Java開發者帶來了新的挑戰和複雜性,例如同步和死鎖。在本文中,我們將探討一些併發程式設計的不同方法,例如多執行緒和執行器。

Java中的併發程式設計

Java的以下三個元件用於併發程式設計

  • java.lang.Thread 類

  • java.lang.Runnable

  • java.util.concurrent

多執行緒

它是Java程式語言的一個特性,允許我們同時執行多個操作。在多執行緒中,操作被分成多個較小的部分,稱為執行緒。每個執行緒執行一個獨立的任務,而不會影響其他執行緒的效能。多執行緒的主要好處是能夠最佳地利用資源(例如CPU),並提高分配操作的執行時間。

在Java中建立執行緒有兩種方法

  • 透過實現Runnable介面

  • 透過擴充套件Thread類

在下一個示例中,我們將透過擴充套件Thread類來建立執行緒

語法

class nameOfThread extends Thread {
   // operations
}

方法

  • 建立一個名為“Thrd”的類,並在其中定義一個名為“operation()”的靜態方法以及一個引數。

  • 現在,在這個方法中,使用一個將執行4次的for迴圈,並遞增給定的引數。此迴圈的try塊將以指定的時間間隔(即1000毫秒)列印輸出。

  • 接下來,建立三個執行緒。在這些執行緒中,將引數傳遞給“operation()”方法。

  • 最後,在main方法中為執行緒類建立三個物件,並使用內建方法“start()”執行它們。

執行緒示例

以下示例演示了我們到目前為止關於多執行緒的討論。

class Thrd {
   public static void operation(int data) {
      for(int i = 1; i <= 4; i++) {
      System.out.println(data++);
      try {
         // each iteration performed with interval of 1 sec
         Thread.sleep(1000);
         } catch(Exception exp){}
      }
   }
}
class Thrd1 extends Thread { // thread number 1
   public void run() {
      Thrd.operation(1);
   }
}
class Thrd2 extends Thread { // thread number 2
   public void run() {
      Thrd.operation(5);
   }
}
class Thrd3 extends Thread { // thread number 3
   public void run() {
      Thrd.operation(10);
   }
}
public class ThrdExecution {
   public static void main(String args[]) {
      // creating object for thread class
      Thrd1 oprt1 = new Thrd1();
      Thrd2 oprt2 = new Thrd2();
      Thrd3 oprt3 = new Thrd3();
      // Starting the thread operation
      oprt1.start();
      oprt2.start();
      oprt3.start();
   }
}

輸出

1
10
5
2
11
6
3
12
7
4
13
8

執行器

它是Java併發API的一個介面,可以啟動和控制執行緒執行。它定義了三個預定義的類,名為ThreadPoolExecutor、ForkJoinPool和ScheduledThreadPoolExecutor。這些類進一步實現Executor和ExecutorService介面來管理執行緒。

但是,大多數情況下,我們使用靜態工廠方法來建立由Executors實用程式類定義的不同型別的執行器服務:

  • newCachedThreadPool()

  • newFixedThreadPool()

  • newScheduledThreadPool()

方法

  • 第一步是匯入“java.util.concurrent”包以啟用Executor的使用。

  • 現在,其餘程式碼與第一個示例類似,除了main()方法。

  • 在main()方法中,使用“newFixedThreadPool()”定義一個執行器,並使用其例項和內建方法“execute()”啟動執行緒的執行。

執行器示例

以下示例說明了如何使用newFixedThreadPool()和執行緒。

import java.util.concurrent.*;
class Thrd {
   public static void operation(int data) {
      for(int i = 1; i <= 4; i++) {
         System.out.println(data++);
         try {
            // each iteration performed with interval of 1 sec
            Thread.sleep(1000);
         } catch(Exception exp){}
      }
   }
}
class Thrd1 extends Thread { // thread number 1
   public void run() {
      Thrd.operation(1);
   }
}
class Thrd2 extends Thread { // thread number 2
   public void run() {
      Thrd.operation(5);
   }
}
class Thrd3 extends Thread { // thread number 3
   public void run() {
      Thrd.operation(10);
   }
}
public class ThrdExecution {
   public static void main(String args[]) {
      // creating executer service
      ExecutorService es = Executors.newFixedThreadPool(3);
      // starting execution
      es.execute(new Thrd1());
      es.execute(new Thrd2());
      es.execute(new Thrd3());
   }
}

輸出

1
5
10
2
6
11
3
7
12
8
4
13

結論

我們討論了Java中併發程式設計的各種方法,例如執行緒和執行器。根據需要,每種方法都有其自身的優點和缺點。在這裡,執行緒是併發的基本單元。

更新於:2023年7月21日

瀏覽量:193

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.