Java 多线程创建的三种方式

方式一:继承Thread类

步骤

  • 写一个类继承Thread类,并重写run方法
  • 创建该类对象
  • 调用该对象的start方法

代码演示

public class MyThread {
    public static void main(String[] args) {
    	//多态
        Thread thread = new Thread1();
        thread.start();
    }
}

class Thread1 extends Thread {
    @Override
    public void run() {
        System.out.println("我是新方法");
    }
}

结果

在这里插入图片描述

方式二:实现Runnable接口

步骤

  • 写一个类实现Runnable接口,并重写run方法
  • 创建该类对象
  • 创建代理该类对象的Thread类对象(点这里看静态代理模式
  • 调用该对象的start()方法

注:这几步可以直接使用lamda表达式简化。

代码演示

public class MyRunnable {
    public static void main(String[] args) {
        Runnable r = new Runnable1();
        Thread thread = new Thread(r);
        thread.start();

        //lamda表达式
        new Thread(() -> {
            System.out.println("我是lamda表达式创建的新线程");
        }).start();
    }
}

class Runnable1 implements Runnable {
    @Override
    public void run() {
        System.out.println("我是传统方式创建的新线程");
    }
}

结果

在这里插入图片描述

方式三:实现Callable接口

步骤

  • 写一个类实现Callable接口,并重写call()方法
  • 创建该类对象
  • 创建执行服务
  • 提交执行
  • 获取结果(会阻塞,可不调用)
  • 关闭服务

代码演示

public class MyCallable {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Callable c1 = new Callable1();
        Callable c2 = new Callable1();

        //创建执行服务
        ExecutorService service = Executors.newFixedThreadPool(2);

        //提交执行
        Future<Boolean> r1 = service.submit(c1);
        Future<Boolean> r2 = service.submit(c2);

        //获取结果
        boolean rs1 = r1.get();
        boolean rs2 = r2.get();
        System.out.println(rs1);
        System.out.println(rs2);

        //关闭服务
        service.shutdownNow();
    }
}

class Callable1 implements Callable<Boolean> {
    @Override
    public Boolean call() throws Exception {
        System.out.println("我是被创建的一个新线程");
        return true;
    }
}

结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值