知识大全 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相关参考
JavaRunnable线程如何编写接口代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Ja
知识大全 解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
解析PHP中VC6X86和VC9X86的区别及NonThreadSafe的意思 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,
JavaThread队列详细代码的介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JavaT
JavaThread类如何在子类中实现run 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Ja
初学Java多线程:使用Runnable接口创建线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java多线程初学者指南(3):使用Runnable接口创建线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起
创建线程 在Java程序中创建线程有几种方法每个Java程序至少包含一个线程主线程其它线程都是通过Thread构造器或实例化继承类Thread的类来创建的 Java线程可以通过直接
Java多线程初学者指南(2):用Thread类创建线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
初学Java多线程:用Thread类创建线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在J
在JAVA中并行和并发机制的区别? 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在JAVA中并行和并