线程

并发,并行,串行的区别

  • 并发:指的同一个时间间隔内发生,交替执行
  • 并行:两个任务同一时刻同时执行,互不干扰
  • 串行:一个任务接着一个任务执行,只能等前一个执行完毕,下一个才能执行

并发的三大特性

  • 原子性: 操作过程中,要么所有操作都执行,要么都不执行
  • 可见性: 一个线程对于共享变量值的修改,能够及时的被其他线程看到
  • 有序性: 程序执行的顺序按照代码的先后顺序执行

线程的生命周期

  • 五种状态:

    1.创建

    2.就绪(等待使用CPU)

    3.运行(执行start方法,获取到CPU使用权)

    4.阻塞(放弃了CPU使用权,只有线程进入就绪态才能再次运行)

    • 等待阻塞: 线程执行wait方法,该线程会释放占用的所有资源,不能自动唤醒,只能依靠其他线程调用notify或notifyAll唤醒.

      notify: 唤醒正在等待这个对象的单个线程。如果有任何线程正在等待此对象,则选择其中一个线程进行唤醒。选择是任意的,由实现自行决定。

      notfiyAll: 唤醒等待这个对象的所有线程

    • 同步阻塞

      运行的线程获取对象的同步锁,若该同步锁,被其他线程占用,则JVM会把该线程放入到锁池中

    • 其他阻塞: 线程执行sleep方法或join方法,或者发出了IO请求,JVM将该线程置为阻塞态

    5.死亡

  • Java中有6种线程状态

    NEW:新创建的线程

    WAITING:就绪态

    RUNNABLE:运行态

    BLOCKED:阻塞态

    TIMED WAITING:线程处于定时等待状态

    TERMINATED:已退出的线程

sleep,wait,yield,join

  • sleep: 释放占用的资源,进入阻塞态
  • wait: 释放占用的资源,进入阻塞态,不能自主唤醒,依靠其他线程通过noti fy或notifyAll唤醒
  • yield: 执行后线程进入就绪状态, 马上释放cpu的使用权,但是保留了CPU的使用资格
  • join: 执行后线程进入阻塞态,在B调用A的join, B会进入阻塞态,一直等待A执行完毕
posted @ 2023-05-28 10:22  香蕉木头人520  阅读(38)  评论(0)    收藏  举报