JAVA编程中常用到的线程和注意点总结

举报
Jack20 发表于 2021/01/05 14:11:04 2021/01/05
【摘要】 一般的创建线程的方式有两种:继承 Thread 类(extends Thread)或者实现Runnable 接口(implements Runnable)1)  继承 Thread 类    实现步骤:  继承 Thread 类, 覆盖run()方法, 提供并发运程的过程  创建这个类的实例  使用 start() 方法启动线程2)  实现 Runnable 接口  实现步骤:  实现 Ru...

一般的创建线程的方式有两种:

继承 Thread 类(extends Thread)或者实现Runnable 接口(implements Runnable)

1)  继承 Thread 类  

  实现步骤:

  继承 Thread 类, 覆盖run()方法, 提供并发运程的过程

  创建这个类的实例

  使用 start() 方法启动线程

2)  实现 Runnable 接口

  实现步骤:

  实现 Runnable 接口, 实现run()方法, 提供并发运程的过程

  创建这个类的实例, 用这个实例作为Thread 构造器参数,创建Thread 类

  使用 start() 方法启动线程      

线程都会出现最基本的五种状态:

1)  New      新建状态

    当程序使用new关键字创建了一个线程后,该线程就处于新建状态,此时线程还未启动,

  当线程对象调用start()方法时,线程启动,进入Runnable 状态

2)  Runnable    可运行(就绪)状态

  当线程处于Runnable 状态时,表示线程准备就绪,等待获取CPU

3)  Running    运行(正在运行)状态

  假如该线程获取了CPU,则进入Running 状态,开始执行线程体,即run()方法中的内

  注意:

   (1)如果系统叧有1个CPU,那么在仸意时间点则叧有1条线程处于Running 状态;

   (2)如果是双核系统,那么同一时间点会有2条线程处于Running 状态但是,当线程数大于处理器数时,依然会是多条线程在同一个CPU 上轮换执行

   (3)当一条线程开始运行时,如果它不是一瞬间完成,那么它不可能一直处于Running 状态, 线程在执行过程中会被中断,目的是让其它线程获得执行的机会,像这样线程调度的策略取决于底层平台。对于抢占式策略的平台而言,系统系统会给每个可执行的线程一小段时间来处理仸务,当该时间段(时间片)用完,系统会剥夺该线程所占资源(CPU), 让其他线程获得运行机会。

  (4) 调用yield()方法,可以使线程由Running 状态进入Runnable 状态


4)  Block      阻塞(挂起)状态

  当如下情冴下,线程会进入阻塞状态:

  线程调用了sleep()方法主动放弃所占CPU 资源

  线程调用了一个阻塞式IO 方法(比如控制台输入方法),在该方法返回前,该线程被阻塞

  当正在执行的线程被阻塞时,其它线程就获得执行机会了。需要注意的是,当阻塞结束时,该线程将进入Runnable 状态,而非直接进入Running 状态

5)  Dead      死亡状态  

  当线程的run()方法执行结束,线程进入Dead 状态

  需要注意的是,不要试图对一个已经死亡的线程调用start()方法,线程死亡后将不能再次作为线程执行,系统会抛出IllegalThreadStateException 异常


注:

1)  new运算创建线程后,线程进入New状态(初始状态)

2)  调用  start()方法后,线程从New状态进入Runnable 状态(就绪状态)

          start()方法是在main()方法(Running 状态)中调用的

3)  线程结束后,进入Dead 状态(死亡状态),被对象垃圾回收

4)  线程进入Dead 状态后,叧能被垃圾回收,不能再开始

5)  如果线程在运行过程中,自己调用了yield()方法,则主动由 Running 状态进入Runnable 状态

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。