Thread和Runnable之间的关系

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

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值