• 继承Thread类实现多线程(java.lang.Thread)
  • 基于Runnable接口实现多线程(java.lang.Thread)  ----优先考虑Runnable接口实现

一、多线程启动底层实现:

多线程使用总结 (一)

  •  任何情况下,只要定义了多线程,多线程的启动永远只有一种方案:Thread类中的start()方法。

 二、Thread与Runnable的联系:

 

public  Class Thread extends Object implements Runnable { }

发现Thread类也是Runnable的子类,在使用MyThread类继承Thread类的时候实际上覆写的还是Runnable接口run()方法。

  • Thread与Runnable实现多线程关系图:
  • 多线程使用总结 (一)
  •  多线程的设计之中,使用了代理设计的结构,用户自定义的线程主体只是负责项目核心功能的实现,二所有的辅助功能实现交由Thread来处理。
  • 在进行Thread启动多线程的时候,调用的是start(),而后找到的是run()方法,但通过Thread类的构造方法传递了一个Runnable接口对象的时候,那么该接口对象將被Thread类中的target属性所保存,在start()方法执行的时候会调用Thread类中的run()方法,而这个run()方法去调用Runnable接口子类被覆写过的run()方法。

 

多线程开发的本质实质上是在于多个线程可以进行同一资源的抢占,那么Thread主要描述的是线程,而资源的描述是通过Runnable完成的。(Thread理论上也可以 描述资源,因为Thread是Runnable的子类)

多线程使用总结 (一)

三、 Callable接口实现多线程

 多线程使用总结 (一)

 范例:

多线程使用总结 (一)

 Runnable与Callable区别?

  • Runnable是在JDK1.0的时候提出的多线程实现接口,而Callable是在JDK1.5之后提出的。
  • java.lang.Runnable接口之中只提供有一个run()方法,并且没有返回值。
  • java.until.concurrent.Callable接口提供有call()方法,可以有返回值。

线程状态:

多线程使用总结 (一)

1、任何一个线程的对象都应该使用Thread类进行封装,所以线程的启动使用的是start()方法,但是启动的时候实际上若干个线程都將进入到一种就绪状态,现在并没有执行。

2、进入到就绪状态之后就需要等待进行资源调度,当某一个线程调度成功之后则进入到运行状态(run()方法),但是所有的线程不可能一直持续执行下去,中间需要产生一些暂停的状态,例如: 某个线程执行一段时间之后就需要让出资源,而后这个线程就將进入到阻塞状态,随后重新回归到就绪状态。

3、当run()方法执行完毕之后,实际上该线程的主要任务也就结束了,那么此时就可以直接进入到停止状态。

相关文章:

  • 2021-05-17
  • 2021-12-03
  • 2022-12-23
  • 2022-01-11
  • 2022-12-23
  • 2022-12-23
  • 2019-07-11
  • 2019-08-05
猜你喜欢
  • 2021-08-14
  • 2022-12-23
  • 2022-01-14
  • 2022-12-23
  • 2021-12-03
  • 2021-11-07
  • 2021-11-19
相关资源
相似解决方案