java创建线程的两种方法区别

 更新时间:2017年06月22日 16:12:16   作者:kma  
这篇文章主要为大家区分了java创建线程的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

在Java中创建一个线程有两种方法:继承Thread类和实现Runnable接口。

下面通过两个例子来分析两者的区别:

1)继承Thread类

public class TestThread extends Thread {
  int count = 3;

  public TestThread(String ThreadName) {
    super(ThreadName);
  }

  @Override
  public void run() {
    for (int i = 0; i < 10; i++)
      if (count > 0) {
        System.out.println(Thread.currentThread().getName() + "--->" + count);
        count--;
      }
  }

  public static void main(String[] args) {
    //new三个线程并启动
    new TestThread("线程一").start();
    new TestThread("线程二").start();
    new TestThread("线程三").start();
  }
}

输出结果:

线程一--->3
线程一--->2
线程一--->1
线程二--->3
线程二--->2
线程二--->1
线程三--->3
线程三--->2
线程三--->1

2)实现Runnable接口

同样跟继承Thread的代码:

public class TestThread implements Runnable {
  int count = 3;

  public TestThread() {
  }

  @Override
  public void run() {
    for (int i = 0; i < 10; i++)
      if (count > 0) {
        System.out.println(Thread.currentThread().getName() + "--->" + count);
        count--;
      }
  }

  public static void main(String[] args) {
    TestThread tr = new TestThread();
    //new三个线程并启动同一个Runnable
    new Thread(tr, "线程一").start();
    new Thread(tr, "线程二").start();
    new Thread(tr, "线程三").start();
  }
}

输出结果:

线程一--->3
线程一--->2
线程一--->1 

可以发现两种新建线程的方式最后的输出结果不一样,是因为在继承Thread类中,同时创建了三个线程,每个线程都执行一个任务,相当于三个线程分别各自进行三次循环打印log;而在第二种实现Runnable接口中是创建三个Thread共同去执行tr这个Runnable,相当于三个Thread共同去执行这一个循环,使得最后count只循环了一次,剩余线程二和线程三都因为使用同一个count导致未能打印出来。

结论:

1)两种创建线程的实现方式不一样,一个通过继承一个通过实现接口,在Java中如果已经继承了其他的父类,那么只能实现接口来创建线程。

2)通过上面的例子可以看到继承Thread,每个线程都独立拥有一个对象,而实现Runnable对象,多个线程共享一个Runnable实例。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • maven项目引用外部jar包的方法

    maven项目引用外部jar包的方法

    本篇文章主要介绍了maven项目引用外部jar的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • java连接mysql数据库实现单条插入和批量插入

    java连接mysql数据库实现单条插入和批量插入

    这篇文章主要为大家详细介绍了java连接mysql数据库实现单条插入和批量插入,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Java创建随机数的四种方式总结

    Java创建随机数的四种方式总结

    这篇文章主要介绍了java的四种随机数生成方式的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2022-07-07
  • Java 读取图片的mimeType的方法

    Java 读取图片的mimeType的方法

    本篇文章主要介绍了Java 读取图片的mimeType的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Java中ReUtil正则表达式工具库的使用

    Java中ReUtil正则表达式工具库的使用

    ReUtil是Hutool库中的正则表达式工具类,提供了多种常用正则表达式操作方法,下面就来介绍一下ReUtil的使用,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02
  • java中利用Dom4j解析和生成XML文档

    java中利用Dom4j解析和生成XML文档

    本篇文章主要介绍了java中利用Dom4j解析和生成XML文档,dom4j是一套非常优秀的Java开源api,主要用于读写xml文档,具有性能优异、功能强大、和非常方便使用的特点。有兴趣的可以了解一下。
    2016-11-11
  • 一文总结Java获取文件后缀名的所有方法

    一文总结Java获取文件后缀名的所有方法

    Java是一种应用广泛的编程语言,可以通过多种方式来实现对文件的操作,如文件名后缀、文件扩展名等,下面这篇文章主要给大家介绍了关于Java获取文件后缀名的所有方法,需要的朋友可以参考下
    2023-05-05
  • Idea的Generate Sources无法生成QueryDSL问题及解决方法

    Idea的Generate Sources无法生成QueryDSL问题及解决方法

    这篇文章主要介绍了解决Idea的Generate Sources无法生成QueryDSL问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Window搭建部署RocketMQ步骤详解

    Window搭建部署RocketMQ步骤详解

    这篇文章主要介绍了Window搭建部署RocketMQ步骤详解,RocketMq是一个由阿里巴巴开源的消息中间件,脱胎去阿里每部使用的MetaQ,在设计上借鉴了Kafka。,需要的朋友可以参考下
    2019-06-06
  • java实现多人聊天室可视化

    java实现多人聊天室可视化

    这篇文章主要为大家详细介绍了java实现多人聊天室可视化,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06

最新评论