Java多线程6大状态
2024-03-05 12:31:21 12 举报
Java多线程的6大状态包括:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)和超时等待(Timed Waiting)。新建状态是线程对象被创建后的状态;就绪状态是线程对象调用start()方法后,线程进入就绪状态,等待系统分配CPU时间片;运行状态是线程获得CPU时间片后执行任务的状态;阻塞状态是线程在执行过程中,遇到某个条件不满足,导致无法继续执行而暂停执行的状态;等待状态是线程调用wait()方法后,进入等待其他线程唤醒的状态;超时等待状态是线程在等待状态下,设置超时时间,如果在超时时间内没有其他线程唤醒,线程会自动返回。
作者其他创作
大纲/内容
①初始状态(new)
synchronized/同步代码块
获取CPU
Java多线程6大状态
②运行时状态(Runnable)
yield()
处于这种状态的线程不会被分配CPU执行时间,需要被显示唤醒,否则将处于无限期等待
处于这种状态的线程不会被分配CPU执行时间,无需无限期的等待被其他线程显示的唤醒,比如用sleep方法传入一个要睡眠的时间,时间到了以后线程自己会醒。
④等待状态(Waiting)
Object.notify()Object.notifyAll()LockSupport.unpark()
运行状态(Running)
Thread.sleep(long) --持有锁 释放CPUObject.wait(long) -- 释放锁和CPUObject.join(long)LockSupport.parkNanos(long)LockSupport.parkUntil(long)
Object.wait()Object.join()LockSupport.park()
多线程的方法Thread.sleep(): 该方法用于让当前线程休眠指定的毫秒数。在休眠期间,线程不会执行任何操作,直到休眠时间结束才会重新进入就绪状态等待CPU调度。Object.wait(): 该方法用于让当前线程等待某个条件满足。它通常与synchronized关键字一起使用,在进入synchronized代码块之前调用wait()方法,将当前线程放入等待队列,等待其他线程执行相应的操作。当其他线程执行完相应的操作后,调用notify()或notifyAll()方法将等待队列中的线程唤醒。Thread.join(): 该方法用于等待另一个线程的结束。调用join()方法的线程会阻塞,直到另一个线程执行完毕才会继续执行。join()方法常用于多线程之间的协作。LockSupport.park(): 该方法用于将当前线程暂停执行,并将其放入指定类型的许可池中。当许可池中有许可可用时,线程会重新进入就绪状态等待CPU调度。park()方法常用于实现非阻塞操作。Object.notify(): 该方法用于唤醒等待队列中的一个线程。它只能唤醒等待队列中的一个线程,而notifyAll()方法可以唤醒等待队列中的所有线程。Thread.interrupt(): 该方法用于中断当前线程的执行。中断后,线程会进入中断状态,可以通过检查Thread.interrupted()或Thread.isInterrupted()方法来检查线程是否被中断。中断状态可以被清除,即重新调用interrupt()方法可以将中断状态清除。这些方法都是Java多线程中常用的方法,根据不同的需求选择合适的方法来实现多线程的同步、协作和中断等操作。
就绪状态(Ready)
run()/异常
当线程的run()方法完成时,或者主线程的run()方法完成时,我们就认为他终止了。线程一旦终止了就不能复生。
③阻塞状态(Blocked)
⑤超时等待状态(Time_Waiting)
start()启动
获得锁
⑥终止状态(TERMINATED)
阻塞状态就是说线程阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态。
收藏
收藏
0 条评论
下一页