java多线程的实现
时间: 2024-06-06 21:03:46 浏览: 134
java 多线程
Java中多线程的实现方式有四种:继承Thread、实现Runnable、实现Callable、使用线程池。具体如下:
1. 继承Thread类
创建一个类,继承Thread类,该类具备多线程的特征。重写Thread类的run方法,在run方法中定义线程任务。创建Thread类的子类的实例,即创建了线程对象。通过调用该对象的start方法开启一条新线程,调用start方法之后Java虚拟机会自动调用该线程的run方法。
```java
class Thread1 extends Thread {
@Override
public void run() {
//线程任务...
System.out.println("继承Thread类");
}
}
Thread1 thread1 = new Thread1();
thread1.start();
```
2. 实现Runnable接口
创建一个类,实现Runnable接口,该类具备多线程的特征。重写Runnable接口的run方法,在run方法中定义线程任务。创建Runnable接口的实现类的实例,该实例就是一个线程对象。通过该线程对象作为参数创建一个Thread对象,调用Thread对象的start方法开启一条新线程,调用start方法之后Java虚拟机会自动调用该线程的run方法。
```java
class Thread2 implements Runnable{
@Override
public void run() {
//线程任务...
System.out.println("实现Runnable接口");
}
}
Thread2 t2 = new Thread2();
Thread thread2 = new Thread(t2);
thread2.start();
```
3. 实现Callable接口
创建一个类,实现Callable接口,该类具备多线程的特征。重写Callable接口的call方法,在call方法中定义线程任务,并且返回一个结果。使用FutureTask来包装Callable对象,该FutureTask对象封装了Callable对象的call方法的返回值。调用FutureTask对象的get方法,就可以获得Callable对象的call方法的返回值。创建FutureTask对象的实例,通过该实例作为参数创建一个Thread对象,调用Thread对象的start方法开启一条新线程,调用start方法之后Java虚拟机会自动调用该线程的call方法。
```java
class Thread3 implements Callable<String>{
@Override
public String call() throws Exception {
//线程任务...
return "实现Callable接口";
}
}
Thread3 t3 = new Thread3();
FutureTask<String> futureTask = new FutureTask<>(t3);
Thread thread3 = new Thread(futureTask);
thread3.start();
String result = futureTask.get();
System.out.println(result);
```
4. 使用线程池
Java中的线程池主要包含两个类:ThreadPoolExecutor和Executors。其中Executors类是一个工厂类,用于创建线程池,而ThreadPoolExecutor是一个线程池的具体实现类。使用线程池可以简化线程的管理,可以重复利用线程,避免了反复创建和销毁线程所带来的开销。
```java
ExecutorService executorService = Executors.newFixedThreadPool(5);
executorService.execute(new Runnable() {
@Override
public void run() {
//线程任务...
System.out.println("使用线程池");
}
});
executorService.shutdown();
```
阅读全文