变种方法1:匿名Runnable
以上实现 Runnable 的接口有更简单的实现方法,我们可以使用匿名 Runnable 来创建一个线程,如下代码所示:
// 变种 1:匿名 Runnable 方式 Thread t2 = new Thread(new Runnable() { @Override public void run() { System.out.println("我是线程变种方法~"); } }); // 启动线程 t2.start();
变种方法2:Lambda创建Runnable
在 JDK 8 之后,我们可以使用 Lambda 表达式来操作代码了,所以对于创建匿名 Runnable 类,我们也有了更简单的实现方法,如下代码所示:
// 变种 2:使用 Lambda 匿名 Runnable 方式 Thread t3 = new Thread(() -> { System.out.println("我是变种 2~"); }); // 启动线程 t3.start();
注意:以上实现代码只支持 JDK 1.8+ 版本。
第三位母亲:村里的首富
虽然我的前两位母亲对我都很好,但对于我这样一个气宇轩扬、骨骼惊奇将来要拯救宇宙和维护世界和平的少年来说,只在国内混未免局限性太大,所以我一直想去大洋彼岸追寻自己的梦想,然而以「前两位」母亲的财力不足以支撑我这样做。
然而我的第二个家庭和村里的首富一家是至交,得知我的志向之后,他们一家愿意倾囊相授,举一家之力帮我去大洋彼岸追寻我的梦想。于是在感激之余,我的第二位母亲让我当场认下首富一家为我的干爹、干妈。就这样,我就有了第三位母亲了。
创建方式三
前两种创建方式虽然不错,但都不能接收线程执行之后的返回值,于是在 JDK 1.5 之后就加入了 Callable 和 Futrue,用于接收线程执行之后的返回值,具体的实现代码如下:
import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * 线程创建示例 3 */ publicclass CreateThreadExample3 { // 创建方式 3:实现 Callable 接口 staticclass MyCallable implements Callable<Integer> { @Override public Integer call() throws Exception { int num = new Random().nextInt(10); System.out.println("生成随机数:" + num); return num; } } // 代码测试 public static void main(String[] args) throws ExecutionException, InterruptedException { // 创建 Callable 子对象 MyCallable callable = new MyCallable(); // 使用 FutureTask 配合 Callable 子对象得到执行结果 FutureTask<Integer> futureTask = new FutureTask<>(callable); // 创建线程 Thread thread = new Thread(futureTask); // 启动线程 thread.start(); // 得到线程执行的结果 int result = futureTask.get(); System.out.println("主线程中拿到子线程执行结果:" + result); } }