package com.javase.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * 实现线程的另外一种方式:实现Callable接口 * 该方式的优点:能够获取返回值(也就是说:能够获取到线程的执行结果) * 该方式的缺点:效率比较低(因为在获取返回值的过程中会使当前线程发生阻塞) */ public class ThreadText11 { public static void main(String[] args) { System.out.println("main begin"); //创建一个未来任务类对象,其中的参数非常重要,需要传一个Callable接口实现类对象(可以用匿名内部类的方式) FutureTask task = new FutureTask(new Callable() { @Override public Object call() throws Exception {//这里的call()方法相当于run()方法,只是该方法有返回值。 //线程需要执行的任务写在这里,下面模拟执行 System.out.println("call method begin"); Thread.sleep(1000 * 5); int a = 100; int b = 200; System.out.println("call method over"); return a + b; } }); //创建线程对象 Thread t = new Thread(task); //启动线程 t.start(); //获取t线程返回值 try { Object obj = task.get();//这行代码会使当前线程(main线程)发生阻塞,等待t线程的结束 System.out.println("t线程执行结果是:" + obj); System.out.println("main over"); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }
实现线程的另外一种方式:实现Callable接口
于 2023-01-01 08:47:12 首次发布