千家信息网

java中Runnable和Thread的区别有哪些

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关java中Runnable和Thread的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在java中可有两种方式实现多线程,一
千家信息网最后更新 2026年11月02日java中Runnable和Thread的区别有哪些

这篇文章将为大家详细讲解有关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的区别有哪些"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

线程 方法 接口 资源 对象 程序 卖票 例子 子类 是在 篇文章 资源共享 三个 也就是 也就是说 只有 同时 实例 实际 技术 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 华服互联网科技怎么样 科技和互联网公司 互联网是不是新科技 合肥互联网科技公司 迪茉互联网科技 苏州互联网科技贷款公司 四个字互联网科技公司取名 阿里互联网科技公司 互联网科技教育视频 互联网在线教育科技创业 晋城互联网科技 中天科技中国工业互联网 四川互联网展示科技馆设计 富国互联网金融科技混合基金 西安有哪些互联网高科技企业 数字互联网科技有限公司 杭州融税互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 山东亿川互联网科技有限责任公司 科技赋能下的互联网金融 互联网金融与金融科技 恒生科技互联网指数分析 新兴科技互联网创新大赛颁奖典礼 黑云互联网科技有限公司 广州百诚互联网科技有限公司官网 江苏互联网科技小贷 互联网科技职业技能培训学校 科技互联网经济论坛 广州三三互联网科技有限公司
0