Callable 实现 多线程
时间: 2024-05-12 21:20:47 浏览: 110
在 Java 中,可以通过实现 Callable 接口,实现多线程操作。Callable 接口与 Runnable 接口类似,都是用来实现多线程操作的接口。但是,Callable 接口支持返回结果和抛出异常。
下面是一个简单的示例,演示如何使用 Callable 实现多线程操作:
```
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class MyCallable implements Callable<String> {
private String name;
public MyCallable(String name) {
this.name = name;
}
@Override
public String call() throws Exception {
System.out.println("Thread " + name + " is running...");
Thread.sleep(5000);
return "Hello from thread " + name;
}
public static void main(String[] args) throws Exception {
ExecutorService executorService = Executors.newFixedThreadPool(3);
Future<String> result1 = executorService.submit(new MyCallable("Thread-1"));
Future<String> result2 = executorService.submit(new MyCallable("Thread-2"));
Future<String> result3 = executorService.submit(new MyCallable("Thread-3"));
System.out.println(result1.get());
System.out.println(result2.get());
System.out.println(result3.get());
executorService.shutdown();
}
}
```
在上面的示例中,我们创建了一个实现了 Callable 接口的类 MyCallable。在 call() 方法中,我们输出了当前线程的名称,然后让线程休眠 5 秒,最后返回一个字符串。
在 main() 方法中,我们创建了一个 ExecutorService,并向其提交了三个 MyCallable 对象。ExecutorService.submit() 方法会返回一个 Future 对象,可以使用 get() 方法获取 MyCallable 对象的返回值。最后,我们关闭了 ExecutorService。
执行上面的代码,可以看到如下输出:
```
Thread Thread-1 is running...
Thread Thread-2 is running...
Thread Thread-3 is running...
Hello from thread Thread-1
Hello from thread Thread-2
Hello from thread Thread-3
```
从输出结果可以看出,我们创建的三个线程都在运行,而且每个线程都在休眠 5 秒钟。而且,我们使用 Future 对象获取了每个线程的返回值。
阅读全文