Java 不同的并发编程方法
在Java中,并发编程是一种技术,允许多个任务或进程在单个处理器或多个处理器上同时运行。它可以提高应用程序的性能和响应性。然而,它也给Java开发人员带来了新的挑战和复杂性,比如同步和死锁。在本文中,我们将探讨一些不同的并发编程方法,如多线程和执行器。
Java中的并发编程
以下是用于并发编程的Java的三个组件
多线程
它是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中并发编程的各种方法,如线程和执行器。每种方法都有其自身的优点和缺点,取决于需求。在这里,线程是并发的基本单元。