Java多线程:三种创建方式详解
54 浏览量
更新于2024-09-01
收藏 65KB PDF 举报
本文将详细介绍Java中实现多线程的三种主要方法,包括继承Thread类、实现Runnable接口以及使用ExecutorService和Future。这三种方式都是Java多线程编程的基础,对于理解和应用多线程技术至关重要。
继承Thread类创建线程类
在Java中,可以通过继承Thread类来创建一个新的线程。首先,你需要定义一个Thread的子类,并覆盖其`run()`方法,这个方法包含了线程要执行的任务。然后,创建这个子类的实例,即创建了一个线程对象。最后,调用线程对象的`start()`方法启动线程。例如:
```java
public class FirstThread extends Thread {
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(this.getName() + "" + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + "" + i);
if (i == 20) {
new FirstThread().start();
new FirstThread().start();
}
}
}
}
```
在这个例子中,`FirstThread`继承了Thread,重写了`run()`方法。在`main()`方法中,当条件满足时,创建并启动了两个`FirstThread`实例,它们与主线程交替执行。
实现Runnable接口创建线程类
另一种方式是实现Runnable接口。你需要定义一个类实现Runnable接口,并实现`run()`方法。然后,将这个实现类的实例传递给Thread的构造函数,创建Thread对象并启动。这种方式相比继承Thread更灵活,因为它允许类去继承其他类。示例代码如下:
```java
public class MyRunnable implements Runnable {
@Override
public void run() {
// 任务代码
}
}
public class Main {
public static void main(String[] args) {
Thread thread1 = new Thread(new MyRunnable());
thread1.start();
Thread thread2 = new Thread(new MyRunnable());
thread2.start();
}
}
```
使用ExecutorService和Future
Java 5引入了Executor框架,其中ExecutorService是线程池服务,它提供了更高级的线程管理。你可以提交Runnable或Callable任务到ExecutorService,它会异步地执行这些任务。Future接口用于获取任务的结果。以下是一个简单的使用示例:
```java
import java.util.concurrent.*;
public class ExecutorExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(2);
Future<Integer> future1 = executor.submit(new Task(1));
Future<Integer> future2 = executor.submit(new Task(2));
System.out.println("Future1 result: " + future1.get());
System.out.println("Future2 result: " + future2.get());
executor.shutdown();
}
}
class Task implements Callable<Integer> {
private int value;
public Task(int value) {
this.value = value;
}
@Override
public Integer call() {
return value * value;
}
}
```
在这个例子中,我们创建了一个固定大小的线程池,然后提交了两个Task任务,每个Task返回其值的平方。Future.get()方法用于阻塞直到任务完成并获取结果。
总结来说,Java中实现多线程有多种方式,每种都有其适用场景。继承Thread适合简单的情况,实现Runnable接口则更为灵活,而ExecutorService则提供了更强大的线程管理和调度能力。理解并熟练掌握这些方法对于编写高效、并发的Java程序至关重要。
442 浏览量
1008 浏览量
648 浏览量
181 浏览量
2016-11-27 上传
1419 浏览量
144 浏览量
102 浏览量
点击了解资源详情
weixin_38652058
- 粉丝: 9
- 资源: 901
最新资源
- Spring Live (160页)
- iBatis Developer's Guide中文版
- Spring iBatis Learning Notes
- Verilog Hardware Description Language
- 《linux完全命令手册》(Linux Complete Command Reference)
- 数控机床RS232通讯接口及参数介绍
- 多型与虚拟.pdf 中文版
- WindowsCE内核简介
- 经典C源程序100例
- 初学者c51学习教程
- GoF 23种设计模式解析附C++实现源码.pdf
- c++编程手册,题目
- Windows 2000 安全配置
- 中南大学微机原理课件
- UML参考手册 UML Reference
- jsp跳转的五种方式