Thread和Runnable之间的关系

原创 2016年05月30日 18:34:32

public class Thread implements Runnable{

  private Runnable target;

//Thread实现Runnable接口,但是并没有完全实现run() 方法,此方法是Runnable子类完成的,所以如果继承Thread就必须覆写run方法

@Override

 public void run(){

  if(!target != null){

    target.run();

  }

 }

}


---------------------------------------Runnable 接口---------------------------

public interface Runnable{

  public abstract void run();

}


===================================================================================

一个类继承Thread,不适合多个线程共享资源,实现Runnable接口,可以方便实现资源共享

因为一个线程只能启动一次,通过Thread实现线程时,线程和线程所要执行的任务是捆绑在一起的。也就使得一个任务只能启动一个线程,不同的线程执行的任务是不相同的,所以没有必要,也不能让两个线程共享彼此任务中的资源。

一个任务可以启动多个线程,通过Runnable方式实现的线程,实际是开辟一个线程,将任务传递进去,由此线程执行。可以实例化多个 Thread对象,将同一任务传递进去,也就是一个任务可以启动多个线程来执行它。这些线程执行的是同一个任务,所以他们的资源是共享。

两种不同的线程实现方式本身就决定了其是否能进行资源共享。


任何线程生命周期: 创建(构造函数 Thread td = new Thread())——就绪(线程队列)—运行(cpu调度,获取处理器资源)——阻塞(正常运行时,sleep,suspend,wait()或者处理时间长,不能进入排队队列,只有阻塞原因消失才能进入排队队列进入就绪状态)——死亡(stop或者run函数运行结束,不具有继续运行能力)


主线程有可能比其他线程先执行完,因为线程操作的不确定性,所以主线程有可能最先执行完,那么其他线程不会受到任何影响,并不会随着主线程的消失而消失

class MyThread implements Runnable {
@Override
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println(Thread.currentThread().getName() + "i:" + i);
}
}
}


public class ThreadAliveDemo extends Thread {


public static void main(String[] args) {
Runnable re = new MyThread();
Thread td = new Thread(re, "线程:");
System.out.println("线程启动之前:" + td.isAlive());
td.start();
System.out.println("线程启动之后:" + td.isAlive());
for (int i = 0; i < 3; i++) {
System.out.println("main运行:" + i);
}
        System.out.println("代码运行之后:" + td.isAlive());
}
最后不确定,可能false,可能true

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA多线程之Runnable和Thread比较

在我们开发的过程中常常会碰到多线程的问题,对于多线程的实现方式主要有两种:实现Runnable接口、继承Thread类。对于这两种多线程的实现方式也是有着一些差异。既然实现了多线程那必然离不开管理这些...
  • u013755987
  • u013755987
  • 2016年07月11日 21:15
  • 10488

Thread 和 Runnable 的区别

Thread 和 Runnable 的区别 实际上,Thread也是一个Runnable,它实现了Runnable接口,在Thread类中有一个Runnable类型的target字段,代表要被执...
  • import_sadaharu
  • import_sadaharu
  • 2016年08月03日 23:42
  • 3230

Java中 Thread和Runnable实现多线程的区别和联系

Java有两种方式实现多线程,第一个是继承Thread类,第二个是实现Runnable接口。他们之间的联系: 1、Thread类实现了Runable接口。 2、都需要重写里面Run方法。 他们之间的区...
  • oxuanboy1
  • oxuanboy1
  • 2016年06月22日 12:18
  • 2246

Thread和Runnable的区别

Thread 与Runnab le区别 博客分类: java 多线程ThreadRunnable  大家都知道多线程可以通过两种方式来创建。 一、通过继承Thread类 二...
  • xiaohuizi2009
  • xiaohuizi2009
  • 2012年06月06日 21:08
  • 11840

Thread是如何处理Runnable的

灵感来源于Java中继承thread类与实现Runnable接口的区别 看完之后突然想知道不同的Thread对象是如何共享runnable对象里的数据的。 参数为Runnable对象的构造...
  • ONS_cukuyo
  • ONS_cukuyo
  • 2017年01月03日 19:06
  • 441

Java中Runnable和Thread的区别

概述 Runnable 是接口。 Thread 是类,且实现了Runnable接口。 Thread部分源码 public class Thread implements Runna...
  • zengmingen
  • zengmingen
  • 2016年11月18日 15:42
  • 1313

Java中Runnable和Thread区别

本来这篇文章是要开始讲讲Handler消息传递机制的。无奈里面牵涉了我不太熟悉的Runnable跟Thread,在学习android前,啃了一段时间的java,但是并没有花太多时间研究。没办法,先把基...
  • uudou
  • uudou
  • 2016年07月06日 20:30
  • 10738

浅谈Thread和Runnable

浅谈Thread和Runnable。 线程状态、守护线程介绍
  • qq455276333
  • qq455276333
  • 2015年11月14日 17:13
  • 12759

Java线程的5种状态及切换(透彻讲解)

Java中的线程的生命周期大体可分为5种状态。 ①NEW:这种情况指的是,通过New关键字创建了Thread类(或其子类)的对象 ②RUNNABLE:这种情况指的是Thread类的对象调用了sta...
  • yaolingrui
  • yaolingrui
  • 2012年04月29日 15:12
  • 42363

java线程系列---Runnable和Thread的区别

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()...
  • wwww1988600
  • wwww1988600
  • 2012年03月01日 11:15
  • 75203
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Thread和Runnable之间的关系
举报原因:
原因补充:

(最多只允许输入30个字)