线程的故事:我的3位母亲成就了优秀的我!(2)

简介: 线程的故事:我的3位母亲成就了优秀的我!(2)

变种方法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);
    }
}
相关文章
|
4月前
|
Java 调度
揭秘!线程的一生竟然如此‘波折’?从新生到消逝,看它们如何在职场(JVM)中奋斗与挣扎!
【8月更文挑战第24天】在软件开发尤其是多线程编程及面试中,掌握线程的生命周期至关重要。线程的生命周期包含五个关键阶段:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)以及死亡(Dead)。新建阶段是指通过`new`关键字创建线程对象;调用`start()`方法后进入就绪状态,等待CPU调度;获得CPU资源后进入运行状态并执行`run()`方法;因I/O操作等原因暂停执行进入阻塞状态;运行完毕或因异常退出`run()`方法后进入死亡状态。理解这些状态及其转换有助于编写高效稳定的多线程程序。
34 1
|
存储 Java 程序员
一个线程的打工故事
一个线程的打工故事
119 0
|
Java
线程的故事:我的3位母亲成就了优秀的我!(3)
线程的故事:我的3位母亲成就了优秀的我!(3)
166 0
线程的故事:我的3位母亲成就了优秀的我!(3)
|
机器学习/深度学习 数据采集 人工智能
人类想早点移民火星,AI能安排上吗?
大概十年前吧,互联网上很多人自诩火星人,写着常人难以理解的火星文,生怕被人看懂。但是想移民火星做火星人,并不是这十几年的事。
人类想早点移民火星,AI能安排上吗?
|
Java
线程的故事:我的3位母亲成就了优秀的我!(1)
线程的故事:我的3位母亲成就了优秀的我!(1)
111 0
|
新零售 算法 安全
程序员真的是吃青春饭吗?如何面对传说中的 35 岁职业焦虑?
  正走在这条路上的你或许也曾想过这些问题。这一次,力扣邀请到了《高效制胜——程序员面试典型题解》作者吴江(迈克老师),分享他 35 岁跳槽,并拿到了技术负责人 Offer,实现收入增长的故事和面试准备经验。   — 01 —   “35 岁危机”真有那么可怕吗?   在 2018 年快过春节的时候,我们部门突然被通知要开一个会,会上通知我们部门要在明年的这个时候被整体裁掉。我在这家五百强外企已经待了五年,当时虽然有这个预感,但是真的听到正式通知时,不免还是感觉有点震惊。
146 0
下一篇
DataWorks