当前位置:首页 > Java技术 > Java多线程(二)线程的三种实现方式

Java多线程(二)线程的三种实现方式

2022年08月05日 21:14:12Java技术2

一、继承Tread类

实现方式:

  • 继承Tread类
  • 重写run方法
  • 创建实例调用start()方法

实现代码案例:

/**
 * 多线程的实现方式一 :继承Tread类,并重写run方法,创建实例调用start方法
 */
public class TestTread extends Thread{
     

    //idea中快速重现父类方法的快捷键是 ctrl + o
    @Override
    public void run() {
     
        System.out.println("我是一个线程呀~~~~");
    }

    public static void main(String[] args) {
     
        //实例化线程实现类
        TestTread testTread = new TestTread();
        //使用start()方法启动该线程,无需调用run方法,因为在线程中他会默认调用run()方法,也就是启动后会自动执行run()方法
        testTread.start();
    }
}

执行结果如下:
Java多线程(二)线程的三种实现方式 _ JavaClub全栈架构师技术笔记

二、实现Runnable接口

  • 实现Runnable接口
  • 重写run()方法
  • 创建Thread时作为参数传入
  • 用start方法

代码实现案例:

/**
 * 多线程的实现方式二 :实现Runnable接口,并重写run方法,创建Thread时作为参数传入,调用start方法
 */
public class TestRunnable implements Runnable{
     
    public static void main(String[] args) {
     
        //分开写
        TestRunnable testRunnable = new TestRunnable();
        Thread tread = new Thread(testRunnable);
        tread.start();

        //简写
        new Thread(new TestRunnable()).start();
    }
    //和Thread一样,需要重写run()方法
    @Override
    public void run() {
     
        System.out.println("我也是一个线程呀~~~");
    }
}

执行结果如下:
Java多线程(二)线程的三种实现方式 _ JavaClub全栈架构师技术笔记

三、实现Callable接口

  • 实现Callable接口

  • 重写call方法

  • 必须定义返回值

  • 抛出异常

  • ExecutorService :不展开讲,后面的文章会详细介绍

    • shutdown():停止接收新任务,原来的任务继续执行
    • shutdownNow():停止接收新任务,原来的任务停止执行
    • awaitTermination(long timeOut, TimeUnit unit):当前线程阻塞

代码实现案例:

/**
 * 多线程的实现方式三:实现Callable接口,重写call方法
 * 需要有返回值
 */
public class TestCallable implements Callable<String> {
     

    public static void main(String[] args) throws ExecutionException, InterruptedException {
     
        TestCallable testCallable = new TestCallable();

        //创建执行服务,这是相当于线程池,本篇文章不展开讲,后面会详细介绍这几个参数和使用方法
        ExecutorService service = Executors.newFixedThreadPool(1);

        //执行
        Future<String> result = service.submit(testCallable);

        //可获取线程的返回值
        String result1 = result.get();
        System.out.println("我是线程的返回值:"+result1);

        //停止线程
        service.shutdownNow();
    }

    @Override
    public String call() throws Exception {
     
        System.out.println("我当然也是一个线程啦啦啦啦德玛西亚~~~");
        return "我是一个线程";
    }
}

执行结果如下:
Java多线程(二)线程的三种实现方式 _ JavaClub全栈架构师技术笔记

四、总结

  • 线程只是实现Runnable或实现Callable接口,还可以继承其他类。

  • 这种方式下,多个线程可以共享一个target对象,非常适合多线程处理同一份资源的情形。

  • 但是编程稍微复杂,如果需要访问当前线程,必须调用Thread.currentThread()方法。下一篇详解。

  • 继承Thread类的线程类不能再继承其他父类(Java单继承决定)。

  • 注:一般推荐采用实现接口的方式来创建多线程,因为单继承多实现,提高复用性!

Java多线程扩展:Java多线程学习汇总

路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧**转载请注明出处哦**

作者:大鱼等于负
来源链接:https://blog.csdn.net/weixin_43829443/article/details/114363994

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/18127.html

分享给朋友:

“Java多线程(二)线程的三种实现方式” 的相关文章

一分钟搞定Java环境变量配置

一分钟搞定Java环境变量配置

对于学Java的人来说,成功配置环境变量是第一步,因为后期不论 你做什么工作,会发现都需要这些,接下来介绍如何安装与配置,我按照jdk1.6来说明,其他一致。 下载官网 首先将jdk安装好后进行配置。 右击“计算机”,右键打开“属性”,...

两年前写的Java基础总结书

两年前写的Java基础总结书

想法衍生 两年前的我,突发奇想,把自己学的Java基础进行规范化的整理,因为自己的文档编辑能力有限,所以写的排版不是很好,参照图书排版的形式,将书籍进行整理,可以供学习Java基础的朋友参考,由于时间有限,可能也会有问题,请指出。下载地址在最后 截图如下:...

Java实现Email发送

一、前言最近将项目的登录密码从图形验证码改为了短信验证码,同时也将忘记密码时长度进行了修改,在修改时,想到了之前在一些国外的网站上,使用过邮箱接收验证码的情况,故想到何妨不自己尝试整合一下Java程序发送邮件信息呢,所以动手整合了Email的发送实例。二、Email发送协议想要在互联网上提供电子邮件...

Java中四种访问修饰符的区别

在java中共有4种访问级别,按访问权限由高到低为:public(公有的)、protected(受保护的)、友好的(没有任何访问权限关键字修饰)和private(私有的)。 类型 类内部 同一个包其...

深入理解 Java 并发锁

深入理解 Java 并发锁

📦 本文以及示例源码已归档在 javacore 一、并发锁简介 确保线程安全最常见的做法是利用锁机制(Lock、sychronized)来对共享数据做互斥同步,这样在同一个时刻,只有一个线程可以执行某个方法或者某个代码块,那么操作必然是原子性的,线程安全的...

全面了解 Java 原子变量类

📦 本文以及示例源码已归档在 javacore 一、原子变量类简介 为何需要原子变量类 保证线程安全是 Java 并发编程必须要解决的重要问题。Java 从原子性、可见性、有序性这三大特性入手,确保多线程的数据一致性。 确保线程安全最...

Java虚拟机1:什么是Java

Java虚拟机1:什么是Java

前言 让我们来看一下Java的广告词,来自http://www.java.com/zh_CN/about/: 97%的企业桌面运行Java 美国有89%的桌面(或计算机)运行Java 全球有900万Java开发人员 开发人员的头号选择...

Java 日志框架详解

Java 日志框架详解

1. JUL学习 JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框 架使用方便,学习简单,能够在小型应用中灵活使用。 1.1 架构介绍 Loggers...

Java实现素数的判断

素数的定义只能被1和它本身整除,不包括1 例 2.3.5.7.11.13 实现代码 Scanner in=new Scanner(System.in); int n ; n=in.nextInt(); for(int n1=2;n1&l...

java计数循环及小技巧

要运行一个很大次数的循环应该选择一个小数,然后去判断 例如本例子是100可以选择10去判断 public static void main(String[] args) { // TODO Auto-generated metho...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。