iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java中Runnable和Thread的区别有哪些
  • 244
分享到

java中Runnable和Thread的区别有哪些

2023-06-02 23:06:04 244人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关java中Runnable和Thread的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Run

这篇文章将为大家详细讲解有关java中Runnable和Thread的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,

  下面看例子:

  package org.thread.demo;
  class MyThread extends Thread{
  private String name;
  public MyThread(String name) {
  super();
  this.name = name;
  }

  public void run(){
  for(int i=0;i<10;i++){
  System.out.println("线程开始:"+this.name+",i="+i);
  }
  }
  }

  package org.thread.demo;

  public class ThreadDemo01 {
  public static void main(String[] args) {
  MyThread mt1=new MyThread("线程a");
  MyThread mt2=new MyThread("线程b");
  mt1.run();
  mt2.run();
  }
  }

  但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在jdk的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动

  start()方法启动线程:

  package org.thread.demo;

  public class ThreadDemo01 {
  public static void main(String[] args) {
  MyThread mt1=new MyThread("线程a");
  MyThread mt2=new MyThread("线程b");
  mt1.start();
  mt2.start();
  }
  };
      这样程序可以正常完成交互式运行。那么为啥非要使用start();方法启动多线程呢?

  在JDK的安装路径下,src.zip是全部的java源程序,通过此代码找到Thread中的start()方法的定义,可以发现此方法中使用了private native void start0();其中native关键字表示可以调用操作系统的底层函数,那么这样的技术成为JNI技术(java Native Interface)

  ·Runnable接口
  在实际开发中一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。
  public interface Runnable{

  public void run();
  }

  例子:

  package org.runnable.demo;

  class MyThread implements Runnable{
  private String name;
  public MyThread(String name) {
  this.name = name;
  }

  public void run(){

  for(int i=0;i<100;i++){
  System.out.println("线程开始:"+this.name+",i="+i);
  }
  }
  };

  但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:public Thread(Runnable targer)此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。(start()可以协调系统的资源):

  package org.runnable.demo;
  import org.runnable.demo.MyThread;

  public class ThreadDemo01 {
  public static void main(String[] args) {
  MyThread mt1=new MyThread("线程a");
  MyThread mt2=new MyThread("线程b");
  new Thread(mt1).start();
  new Thread(mt2).start();
  }
  }

  · 两种实现方式的区别和联系:
  在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比
  继承Thread类有如下好处:
  ->避免点继承的局限,一个类可以继承多个接口。
  ->适合于资源的共享
  以卖票程序为例,通过Thread类完成:

  package org.demo.dff;
  class MyThread extends Thread{
  private int ticket=10;
  public void run(){
  for(int i=0;i<20;i++){
  if(this.ticket>0){
  System.out.println("卖票:ticket"+this.ticket--);
  }
  }
  }
  };

  下面通过三个线程对象,同时卖票:
  package org.demo.dff;
  public class ThreadTicket {
  public static void main(String[] args) {
  MyThread mt1=new MyThread();
  MyThread mt2=new MyThread();
  MyThread mt3=new MyThread();
  mt1.start();//每个线程都各卖了10张,共卖了30张票
  mt2.start();//但实际只有10张票,每个线程都卖自己的票
  mt3.start();//没有达到资源共享
  }
  }

  如果用Runnable就可以实现资源共享,下面看例子:

  package org.demo.runnable;
  class MyThread implements Runnable{
  private int ticket=10;
  public void run(){
  for(int i=0;i<20;i++){
  if(this.ticket>0){
  System.out.println("卖票:ticket"+this.ticket--);
  }
  }
  }
  }

  package org.demo.runnable;
  public class RunnableTicket {
  public static void main(String[] args) {
  MyThread mt=new MyThread();
  new Thread(mt).start();//同一个mt,但是在Thread中就不可以,如果用同一
  new Thread(mt).start();//个实例化对象mt,就会出现异常
  new Thread(mt).start();
  }
  };


  虽然现在程序中有三个线程,但是一共卖了10张票,也就是说使用Runnable实现多线程可以达到资源共享目的。
  Runnable接口和Thread之间的联系:
  public class Thread extends Object implements Runnable
  发现Thread类也是Runnable接口的子类。

关于“java中Runnable和Thread的区别有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: java中Runnable和Thread的区别有哪些

本文链接: https://www.lsjlt.com/news/231752.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java中Runnable和Thread的区别有哪些
    这篇文章将为大家详细讲解有关java中Runnable和Thread的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Run...
    99+
    2023-06-02
  • Java中Runnable和Thread有什么区别
    这篇文章给大家介绍Java中Runnable和Thread有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Threa...
    99+
    2023-06-17
  • C++中thread和pthread的区别有哪些
    C++中的thread是C++11标准引入的线程库,而pthread是POSIX标准中定义的线程库。它们之间的主要区别如下:1. 语...
    99+
    2023-10-20
    C++
  • Java中runnable和callable有什么区别
    这篇文章给大家分享的是有关Java中runnable和callable有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;...
    99+
    2023-06-14
  • Java中使用Thread类和Runnable接口实现多线程的区别
    使用Thread类和Runnable接口实现多线程的区别 先看两种实现方式的步骤: public class ThreadDemo{ public static void m...
    99+
    2024-04-02
  • C++中thread库join和detach的区别有哪些
    本篇内容介绍了“C++中thread库join和detach的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!线程状态在一个线程的生...
    99+
    2023-06-25
  • 在Java中runnable和callable有什么区别
    Java中runnable和callable的区别:callable规定的方法是baicall(),runnable规定的方法是run()。call方法可以抛出异常,run方法不可以。callable的任务执行后可返回值,而runnable...
    99+
    2024-04-02
  • java中runnable和callable的区别是什么
    Runnable和Callable都是实现多线程的方式,但是有一些区别:1. 返回值:Runnable不返回结果,只是执行一些任务,...
    99+
    2023-08-15
    java callable runnable
  • Java中使用Thread类和Runnable接口实现多线程的区别是什么
    这篇“Java中使用Thread类和Runnable接口实现多线程的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2023-07-02
  • Java中==和equals()的区别有哪些
    小编给大家分享一下Java中==和equals()的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. ==== 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用数据类型变量中1.1 基本数...
    99+
    2023-06-25
  • Thread与runnable在java中有什么不同
    Thread与runnable在java中有什么不同 ?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java中实现多线程的方法有两种:继承Thread类和实现runnable接...
    99+
    2023-05-31
    java thread runnable
  • Java中Runnable与Callable接口有什么区别
    这篇文章主要介绍“Java中Runnable与Callable接口有什么区别”,在日常操作中,相信很多人在Java中Runnable与Callable接口有什么区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-07-05
  • java面试常问的Runnable和Callable的区别
    Runnable Runnable接口非常简单,就定义了一个方法run(), 实现Runnable接口的run方法就可以实现多线程 // 函数式接口 @FunctionalInter...
    99+
    2024-04-02
  • java中start()和run()的区别有哪些
    这篇文章主要介绍了java中start()和run()的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java是什么Java是一门面向对象编程语言,可以编写桌面应用...
    99+
    2023-06-14
  • android中java和Kotlin的区别有哪些
    Android中Java和Kotlin是两种不同的编程语言。以下是它们之间的一些区别: 语法:Java使用较为繁琐的语法,而Ko...
    99+
    2023-10-25
    android java Kotlin
  • java中Pair和Map的区别有哪些
    这篇文章主要介绍了java中Pair和Map的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在核心Java库中可以使用配对(Pair)的实现。除此之外,某些第三方库...
    99+
    2023-06-14
  • java中yield()和sleep()的区别有哪些
    这篇文章将为大家详细讲解有关java中yield()和sleep()的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Androi...
    99+
    2023-06-15
  • Java中StringBuffer和StringBuilder的区别有哪些
    本篇内容主要讲解“Java中StringBuffer和StringBuilder的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中StringBuffer和StringBuil...
    99+
    2023-06-15
  • java中LinkedHashMap和HashMap的区别有哪些
    这篇文章主要介绍了java中LinkedHashMap和HashMap的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java的优点是什么1. 简单,只需理解基本的...
    99+
    2023-06-14
  • java中sleep()和wait()的区别有哪些
    这篇文章主要介绍java中sleep()和wait()的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作