package step2; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; // ---------------------Begin------------------------ //tips: 输出语句为:Thread.currentThread().getName()+"的call()方法在运行" //定义一个实现Callable接口的实现类,类名必须命名为MyThread_callable // ---------------------End------------------------ public class CallableExample { public static void main(String[] args) throws InterruptedException, ExecutionException { // 创建Callable接口的实现类对象 MyThread_callable myThread3 = new MyThread_callable(); // 使用FutureTask封装Callable接口 FutureTask<Object> ft1 = new FutureTask<>(myThread3); // 使用Thread(Runnable target ,String name)构造方法创建线程对象 Thread thread1 = new Thread(ft1, "thread1"); // 创建并启动另一个线程thread2 FutureTask<Object> ft2 = new FutureTask<>(myThread3); Thread thread2 = new Thread(ft2, "thread2"); // ---------------------Begin------------------------ // 调用线程对象的start()方法启动线程 // 可以通过FutureTask对象的方法管理返回值 // ---------------------End------------------------ } }
时间: 2023-08-15 08:14:06 浏览: 170
根据提示,补充代码如下:
```java
package step2;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
// ---------------------Begin------------------------
// 输出语句为:Thread.currentThread().getName()+"的call()方法在运行"
// 定义一个实现Callable接口的实现类,类名必须命名为MyThread_callable
class MyThread_callable implements Callable<Object> {
@Override
public Object call() throws Exception {
System.out.println(Thread.currentThread().getName() + "的call()方法在运行");
return null;
}
}
// ---------------------End------------------------
public class CallableExample {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 创建Callable接口的实现类对象
MyThread_callable myThread3 = new MyThread_callable();
// 使用FutureTask封装Callable接口
FutureTask<Object> ft1 = new FutureTask<>(myThread3);
// 使用Thread(Runnable target ,String name)构造方法创建线程对象
Thread thread1 = new Thread(ft1, "thread1");
// 创建并启动另一个线程thread2
FutureTask<Object> ft2 = new FutureTask<>(myThread3);
Thread thread2 = new Thread(ft2, "thread2");
// ---------------------Begin------------------------
// 调用线程对象的start()方法启动线程
thread1.start();
thread2.start();
// 可以通过FutureTask对象的方法管理返回值
System.out.println("线程1返回结果:" + ft1.get());
System.out.println("线程2返回结果:" + ft2.get());
// ---------------------End------------------------
}
}
```
在这个例子中,我们定义了一个实现了`Callable`接口的类`MyThread_callable`,并重写了`call()`方法,输出了线程名称和运行状态。
在`CallableExample`类中,我们创建了两个`FutureTask`对象,用于封装`MyThread_callable`对象。接着,我们创建了两个线程对象,并把`FutureTask`对象传入线程构造函数中。然后,我们启动了线程,并通过`futureTask.get()`方法获取了线程的返回值,并打印出来。最后,我们得到了线程的执行结果。
阅读全文