Java 不同的并发编程方法

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()’的静态方法,其中包含一个参数。

  • 现在,在这个方法中,使用一个for循环来运行4次,并递增给定的参数。这个循环的try块将以指定的时间间隔打印输出,即1000毫秒。

  • 进一步地,在这些线程内创建三个线程。在这些线程内部,将参数传递给’operation()’方法。

  • 最后,在主方法中创建三个线程类的对象,并使用内置的’main()’方法来执行它们。

线程示例

以下示例演示了我们到目前为止关于多线程的讨论内容。

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

Executor

它是Java Concurrent API的一个接口,可以启动和控制线程的执行。它定义了三个预定义类ThreadPoolExecutor、ForkJoinPool和ScheduledThreadPoolExecutor。这些类进一步实现了Executor和ExecutorService接口来管理线程。

但是,大多数情况下,我们使用Executors实用类定义的静态工厂方法来创建不同类型的执行器服务 –

  • newCachedThreadPool()

  • newFixedThreadPool()

  • newScheduledThreadPool()

解决方案

  • 第一步是导入’java.util.concurrent’包,以启用Executor的使用。

  • 现在,除了main()方法之外,其余代码的工作方式与第一个示例类似。

  • 在main()方法中,使用’newFixedThreadPool()’定义一个执行器,并使用其实例和内置的’method’方法开始执行线程。

Executor示例

以下示例演示了使用线程的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中并发编程的各种方法,如线程和执行器。每种方法都有其自身的优点和缺点,取决于需求。在这里,线程是并发的基本单元。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程