【第22期】观点:IT 行业加班,到底有没有价值?

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开发:Handler Runnable和Thread之间的区别和联系 应用

Android开发:Handler Runnable和Thread之间的区别和联系 应用--------------------看完本篇,从此一览无余! 分类: Android开发2013-...

Thread,Looper,Handler,Message,MessageQueue,MessagePool之间的关系

[img]http://dl.iteye.com/upload/attachment/0062/2654/8ff37ab5-f202-38f1-bd31-e474f55dde5a.jpg[/img] 多线程与异步 Main Thread & UI Thread 当程序启动的时候Andr...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

android中Thread、handler(Handler Thread)、Runnable之间的关系

在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢?     首先说明Android的CPU分配的最小单元是线程,Handler...

Android中Thread,hanlder(HanlderThread),Runnable之间的关系

在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 1...

Android中Handler Thread及Runnable之间的关系

Android中Handler Thread及Runnable之间的关系 在多线程编程这块,我们经常要使用Handler,Thread和Runnbale这三个类,那么他们之间的关系你是否弄清楚了呢?...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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