Java创建线程的七种方法,你知道几种?

目录

方法1 :继承Thread类,重写run方法,调用 start 方法启动

方法2 :实现Runnable接口,重写run方法,调用 start 方法启动

方法3:匿名内部类 创建Thread 子类对象

方法4:匿名内部类 创建Runnable子类对象

方法5:使用 lambda 表达式 创建Runnable 子类对象

方法6:使用线程池!!! 重点

方法7:使用Callable!!!重点


如果觉得有用,记得三连哦!

方法1 :继承Thread类,重写run方法,调用 start 方法启动

    public static void main(String[] args) {
        class MyThread extends Thread{
            @Override
            public void run() {
                System.out.println("成功创建线程!");
            }
        }
        MyThread thread = new MyThread();
        thread.start();
    }

方法2 :实现Runnable接口,重写run方法,调用 start 方法启动

public static void main(String[] args) {
        class MyRunnable implements Runnable {
            @Override
            public void run() {
                System.out.println("成功创建线程!");
            }
        }
        MyRunnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable,"继承Runnable接口实现");
        thread.start();
    }

方法3:匿名内部类 创建Thread 子类对象

    public static void main(String[] args) {
        Thread thread = new Thread(){
            @Override
            public void run() {
                System.out.println("成功创建线程!");
            }
        };
        thread.start();
    }

方法4:匿名内部类 创建Runnable子类对象

public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("成功创建线程!");
            }
        });
        thread.start();
    }

方法5:使用 lambda 表达式 创建Runnable 子类对象

public static void main(String[] args) {
        Thread thread= new Thread(()->{
            System.out.println("成功创建线程!");
        });
        thread.start();
    }

方法6:使用线程池

创建线程池:

1. 使用 Executors.newFixThreadPool ( )  创建固定线程数的线程池

2.返回值的类型为 ExecutorService

3. 通过ExecutorsSercvice. submit 可注册一个任务到线程池中

例如:

public static void main(String[] args) {
        ExecutorService pool = Executors.newFixedThreadPool(10);
        pool.submit(()->{
            System.out.println("一个在 线程池 中的线程 创建完成!");
        });
    }

Executors 创建线程线程池的一些方式(工厂方法):

1. newFixedThreadPool 创建固定线程数的线程池

2. newCachedThreadPool 创建线程数动态增长的线程池

3. newSingleThreadExecutor 创建只包含一个线程的线程池

4. newScheduledThreadPool 设定延迟时间后执行命令,或者定期执行(增强版的Timer)

方法7:使用Callable

什么是Callable?(带返回值的Runnable)

都是描述一个"任务" ,但是Callable 带有返回值,Runnable不带返回值。Callable 也是一个 interface。相当于把线程封装了一个“返回值”,方便程序员 借助多线程计算结果。

Callable 通常搭配 FutureTask 使用,FutureTask 的作用是用来保存Callable的返回值。FutureTask负责等待这个结果出来,但其实啥时候出来结果是不确定的(FutureTask就相当于我们点餐时候,收银员给的一个小票,Callable在后台做食物,我们拿着小票去领)

例子:创建线程计算1+2+3+4+ .......+1000

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //1.创建一个 callable 相当于 Runnable,但有了返回值 sum
        Callable<Integer> callable = new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                int sum = 0;
                for (int i = 1; i <= 1000; i++) {
                    sum += i;
                }
                return sum;
            }
        };
        //2. 创建一个FutureTask,task用来接收返回值
        //这里的返回值就相当于一个小票!即便这里的相加还没有开始
        FutureTask task = new FutureTask(callable);
        //3. 创建一个线程开始工作!进行相加!
        Thread t = new Thread(task);
        t.start();
        //4. 线程里的 Callable 任务完成!返回值被赋给 task
        //可以通过 task 里的 get() 方法获取到返回值!
        System.out.println(task.get());
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shn!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值