关于线程的三种实现方式,其实没你想象的那么难

前言

大家都知道Java多线程开发中,实现线程有三种方式,继承Thread类,实现Runnable、Callable接口等
,下面就举例说明三种实现方式

实现代码

具体实现代码如下

package springbootdocker.demo.service;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @Author: dengcs
 * @Date: 2020/7/6 21:22
 * Comment:
 */
public class Test{

    //第一种继承Thread
    private static class TestThread extends Thread{
        @Override
        public void run() {
            super.run();
            System.out.println("this is extendsd Thread test");
        }
    }

    //第二种实现Runnable接口
    private static class TestRunnable implements Runnable{
        @Override
        public void run() {
            System.out.println("this is Runnable test");
        }
    }

    //实现Callable接口,可以有返回值
    private static class TestCallRunnable implements Callable<String>{
        @Override
        public String call() throws Exception {
            return "this is Callable test";
        }
    }

    public static void main(String[] args) {
        new TestThread().start(); //第一种测试

        new Thread(new TestRunnable()).start(); //第二种测试

        TestCallRunnable testCallRunnable = new TestCallRunnable(); //第三种测试
        FutureTask<String> futureTask =new FutureTask<>(testCallRunnable);
        new Thread(futureTask).start();

        try {
            System.out.println(futureTask.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

    public void testProc(){
        new Thread().start();
    }

}

测试结果

测试结果为
在这里插入图片描述

三种方式的优缺点

分别对三种实现方式的优缺点进行说明

  1. 继承Thread
    优点:实现简单,只需实例化继承类的实例,即可使用线程
    缺点:扩展性不足,Java是单继承的语言,如果一个类已经继承了其他类,就无法通过这种方式实现自定义线程

  2. 实现Runnable接口
    优点:
    扩展性好,可以在此基础上继承其他类,实现其他必需的功能
    对于多线程共享资源的场景,具有天然的支持,适用于多线程处理一份资源的场景

    缺点:构造线程实例的过程相对繁琐一点

  3. 实现Callable接口

    优点:
    扩展性好
    支持多线程处理同一份资源
    具备返回值以及可以抛出受检查异常
    缺点:
    相较于实现Runnable接口的方式,较为繁琐

当然,这只是线程最简单的应用,如果用好线程,必须了解线程池及线程的几种状态,新建-》就绪-》运行-》终止, 其中还有等待和阻塞等过程。如下图

写在最后

总之,线程的应用范围非常广,用好线程其实还有很多东西要学。。

想了解更多线程知识,请继续关注我吧_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值