常见创建线程的方式

一般情况下,创建线程有三种方式:继承 Thread 类、实现 Runnable 接口和实现 Callable 接口。

1)继承 Thread 类:

== 继承 Thread 类,重写 run() 方法,调用 start() 方法启动线程。==

public class CreatThread1 {
    public static class ThreadTest1 extends Thread {
        @Override
        public void run() {
            System.out.println("继承Thread类创建线程success!");
        }
    }

    public static void main(String[] args) {
        ThreadTest1 myThreadTest1 = new ThreadTest1();
        // 调用strat方法启动线程
        // myThreadTest1.run();
        myThreadTest1.start();
    }
}

在这里插入图片描述

2)实现 Runnable 接口:

== 实现 Runable 接口,重写 run() 方法。==

public class CreatThread2 implements Runnable {

    @Override
    public void run() {
        System.out.println("实现Runnable接口创建线程success!");
    }

    public static void main(String[] args) {
        CreatThread2 creatThread2 = new CreatThread2();
//        new Thread(creatThread2).run();
        new Thread(creatThread2).start();
    }
}

在这里插入图片描述

Q:以上两种方式,都是在调用 start() 方法时调用了 run() 方法,那为什么不能直接去调用 run() 方法呢?
A:以上这两种方式如果直接调用 run() 方法的时候也是能成功执行的。

JVM 在执行 start() 方法时,会先创建一个新线程,由创建出来的新线程去执行 Thread 的 run() 方法,这才起到多线程的效果。如果直接调用 Thread 的 run() 方法,那么 run() 方法还是运行在主线程中,相当于顺序执行,就起不到多线程的效果。

以上这两种创建线程的方法都是没有返回值的,如果我们需要关注线程执行结果的话,就需要第三种创建线程的方式

3)实现 Callable 接口:

== 实现 Callable 接口,重写 call() 方法,这种方式可以通过 FutureTask 获取任务执行的返回值。==

public class CreatThread3 implements Callable {

    @Override
    public Object call() throws Exception {
        return "实现Callable接口创建线程success!";
    }

    public static void main(String[] args) {
        // 创建异步任务
        FutureTask<String> task = new FutureTask<String>(new CreatThread3());
        // 启动线程
        new Thread(task).start();
        try {
            // 等待执行完成,并获取返回结果
            String result = task.get();
            System.out.println("FutureTask执行结果: " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值