使用继承的方式,可以方便的处理参数,在自定义的线程类里面可以添加成员变量,通过构造函数或者set方法来给变量设置值。
public class ThreadTest { public static class MyThread extends Thread { private String info = ""; public MyThread() {} public MyThread(String info) { this.info = info; } @Override public void run() { System.out.println("hello,I am " + info); } } public static void main(String[] args) { MyThread thread = new MyThread("Tim"); thread.start(); } }这种方式和继承Thread类以及实现Runnable接口方式的区别就是,可以有一个返回值。
使用FutureTask的步骤:
创建CallerTask继承自Callable接口创建异步任务new FutureTask<>(new CallerTask)启动线程new Thread(futureTask).start() import java.util.HashMap; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; /** * 本例示范:线程创建和运行 * @author Tim * */ public class ThreadTest { public static class CallerTask implements Callable<String> { @Override public String call() throws Exception { return "hello,"; } } public static class CallerTask2 implements Callable<Map> { @Override public Map call() throws Exception { Map map = new HashMap<>(); map.put("key", "futureTask"); return map; } } public static void main(String[] args) { //创建异步任务 FutureTask<String> futureTask = new FutureTask<>(new CallerTask()); FutureTask<Map> futureTask2 = new FutureTask<>(new CallerTask2()); //启动线程 new Thread(futureTask).start(); new Thread(futureTask2).start(); try { //等待任务执行完毕,并返回结果 String result = futureTask.get(); System.out.print(result); Map map = futureTask2.get(); System.out.println(map.get("key")); } catch (Exception e) { } } }这里写了2个Task,返回值的类型有区别。