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

}

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

相关文章推荐

android 多线程Thread,Runnable,Handler,AsyncTask等之间的关系

android 的多线程实际上就是java的多线程。android的UI线程又称为主线程。 我们创建的Service、Activity以及Broadcast均是一个主线程处理,这里我们可以理解为UI...

Android之Thread,Runnable,Handler,AsyncTask等之间的关系

android 的多线程实际上就是java的多线程。android的UI线程又称为主线程。 首先是Thread 和 Runnable: Thread才是一个线程,而Runnable可以理解...

Android多线程Thread Runnable Handler AsyncTask等之间的关系

转自:点击打开链接 android 的多线程实际上就是java的多线程。android的UI线程又称为主线程。 首先是Thread 和 Runnable: Thread才是一...

Thread,Runnable,Callable,Feature的之间的关系

A   调度执行线程单元的三种形式Thread,Runnable实现run()方法,Callable实现 T call()有返回值。 B   Runnable,可以被Thread包装,启动线程执行,...

android 多线程Thread,Runnable,Handler,AsyncTask等之间的关系

Java的多线程是Thread实现,跟runnable没有太大关系。 android中因为需要多线程交换数据出现了handler+message+thread实现多线程数据通信。就hanlder本身而...

Android Handler Runnable和Thread之间的区别和联系详解

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()...

Android开发:Handler Runnable和Thread之间的区别和联系

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()...

Android开发:Handler Runnable和Thread之间的区别和联系 应用

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()...

安卓复习之旅—Thread、Runnable、Callable、Futrue类关系与区别

开启一个线程有三种方式定义:Thread、Runnable、Callable,其中Runnable实现的是void run()方法,Callable实现的是 V call()方法,并且可以返回执行结果...

多线程相关 Thread、Runnable、Callable、Futrue类关系与区别

Java中存在Runnable、Callable、Future、FutureTask这几个与线程相关的类或者接口,在Java中也是比较重要的几个概念,我们通过下面的简单示例来了解一下它们的作用于区别。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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