美文网首页
java 线程学习(一)

java 线程学习(一)

作者: fynn飞 | 来源:发表于2017-12-07 12:03 被阅读0次

    java线程

    线程是cpu执行的基本调度单位,它比进程更加轻量级,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址,文件I/O等),又可以独立调度。在主流的操作系统中都提供了线程的实现,Java语言提供了在不同硬件和操作系统平台下对线程操作的统一处理,每个已经执行Start()方法且还未结束的java.lang.Thread类的实例就代表了一个线程

    线程状态

    1.新建(New):当一个线程创建后,尚未启动的状态。Thread thread = new Thread();

    2.运行(Runable):Runable包括了操作系统线程状态中的Running和Ready,也就是处于此状态的线程有可能正在执行,也有可能正在等待CPU为它分配执行时间,即执行了thread.start()的线程

    3.无限期等待(Waiting):处于这种状态的线程不会被CPU分配执行时间,它们要等待被其他线程显式唤醒(可以通过notify/notifyAll唤醒)。以下方法会让线程进入无限期等待状态:

    • 没有设置Timeout参数的Object.wait()方法
    • 没有设置Timeout参数的Thread.join()方法
    • LockSupport.park()方法。

    4.限期等待(Timed Waiting);处于这种状态的线程也不会被分配CPU执行时间,不过无需等待其他线程显式唤醒,在一定时间之后由系统自动唤醒。以下方法会让线程进入限期等待状态:

    • Thread.sleep()方法
    • 设置了Timeout参数的Object.wait()方法
    • 设置了Timeout参数的Thread.join()方法
    • LockSupport.parkNanos()方法
    • LockSupport.parkUntil()方法

    5.阻塞(Blocked):线程被阻塞了,“阻塞状态”与“等待状态”的区别是:“阻塞状态”在等待着获取到一个排他锁,这个事件将在另外一个线程放弃这个锁的时候发生,而“等待状态”则是在等待一段时间,或者唤醒动作的发生。在程序等待进入同步区域的时候,线程即将进入这种状态

    6.结束(Terminated):已经终止线程的线程状态,线程已经执行完成

    线程状态之间的关系可以参考下图

    线程状态转换关系

    相关文章

      网友评论

          本文标题:java 线程学习(一)

          本文链接:https://www.haomeiwen.com/subject/epqcixtx.html