知识大全 Java中Runnable和Thread的区别

Posted hr

篇首语:有志不在年高,无志空长百岁。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java中Runnable和Thread的区别相关的知识,希望对你有一定的参考价值。

Java中Runnable和Thread的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在java中可有两种方式实现多线程 一种是继承Thread类 一种是实现Runnable接口

  Thread类是在java lang包中定义的 一个类只要继承了Thread类同时覆写了本类中的

  run()方法就可以实现多线程操作了 但是一个类只能继承一个父类 这是此方法的局限

  下面看例子

  package thread demo;

  class MyThread extends Thread

  private String name;

  public MyThread(String name)

  super();

  this name = name;

  

  public void run()

  for(int i= ;i< ;i++)

  System out println( 线程开始 +this name+ i= +i);

  

  

  

  package thread demo;

  public class ThreadDemo

  public static void main(String[] args)

  MyThread mt =new MyThread( 线程a );

  MyThread mt =new MyThread( 线程b );

  mt run();

  mt run();

  

  

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

  start()方法启动线程

  package thread demo;

  public class ThreadDemo

  public static void main(String[] args)

  MyThread mt =new MyThread( 线程a );

  MyThread mt =new MyThread( 线程b );

  mt start();

  mt start();

  

  ;这样程序可以正常完成交互式运行 那么为啥非要使用start();方法启动多线程呢?

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

  ·Runnable接口

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

  public interface Runnable

  public void run();

  

  例子

  package runnable demo;

  class MyThread implements Runnable

  private String name;

  public MyThread(String name)

  this name = name;

  

  public void run()

  for(int i= ;i< ;i++)

  System out println( 线程开始 +this name+ i= +i);

  

  

  ;

  但是在使用Runnable定义的子类中没有start()方法 只有Thread类中才有 此时观察Thread类 有一个构造方法 public Thread(Runnable targer)

  此构造方法接受Runnable的子类实例 也就是说可以通过Thread类来启动Runnable实现的多

  线程 (start()可以协调系统的资源):

  package runnable demo;

  import runnable demo MyThread;

  public class ThreadDemo

  public static void main(String[] args)

  MyThread mt =new MyThread( 线程a );

  MyThread mt =new MyThread( 线程b );

  new Thread(mt ) start();

  new Thread(mt ) start();

  

  

  · 两种实现方式的区别和联系

  在程序开发中只要是多线程肯定永远以实现Runnable接口为主 因为实现Runnable接口相比

  继承Thread类有如下好处

   >避免点继承的局限 一个类可以继承多个接口

   >适合于资源的共享

  以卖票程序为例 通过Thread类完成

  package demo dff;

  class MyThread extends Thread

  private int ticket= ;

  public void run()

  for(int i= ;i< ;i++)

  if(this ticket> )

  System out println( 卖票 ticket +this ticket );

  

  

  

  ;

  下面通过三个线程对象 同时卖票

  package demo dff;

  public class ThreadTicket

  public static void main(String[] args)

  MyThread mt =new MyThread();

  MyThread mt =new MyThread();

  MyThread mt =new MyThread();

  mt start();//每个线程都各卖了 张 共卖了 张票

  mt start();//但实际只有 张票 每个线程都卖自己的票

  mt start();//没有达到资源共享

  

  

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

  package demo runnable;

  class MyThread implements Runnable

  private int ticket= ;

  public void run()

  for(int i= ;i< ;i++)

  if(this ticket> )

  System out println( 卖票 ticket +this ticket );

  

  

  

  

  package 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();

  

  ;

  虽然现在程序中有三个线程 但是一共卖了 张票 也就是说使用Runnable实现多线程可以达到资源共享目的

  Runnable接口和Thread之间的联系

  public class Thread extends Object implements Runnable

cha138/Article/program/Java/gj/201311/27649

相关参考

知识大全 Java Runnable线程如何编写接口代码

JavaRunnable线程如何编写接口代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Ja

知识大全 解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思

解析PHP中VC6X86和VC9X86的区别及NonThreadSafe的意思  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,

知识大全 Java Thread队列详细代码的介绍

JavaThread队列详细代码的介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JavaT

知识大全 Java Thread类如何在子类中实现run

JavaThread类如何在子类中实现run  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Ja

知识大全 使用Runnable接口创建线程

初学Java多线程:使用Runnable接口创建线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 使用Runnable接口创建线程

Java多线程初学者指南(3):使用Runnable接口创建线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 java线程简介(线程的生命)

  创建线程      在Java程序中创建线程有几种方法每个Java程序至少包含一个线程主线程其它线程都是通过Thread构造器或实例化继承类Thread的类来创建的    Java线程可以通过直接

知识大全 用Thread类创建线程

Java多线程初学者指南(2):用Thread类创建线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 用Thread类创建线程

初学Java多线程:用Thread类创建线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在J

知识大全 在JAVA中并行和并发机制的区别?

在JAVA中并行和并发机制的区别?  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在JAVA中并行和并