`
mo默羽
  • 浏览: 22657 次
社区版块
存档分类
最新评论

Java线程唤醒与阻塞常用方法有哪些?

    博客分类:
  • Java
阅读更多

  如果线程是因为调用了wait()、sleep()或者join()方法而导致的阻塞,可以中断线程,并且通过抛出InterruptedException来唤醒它;如果线程遇到了IO阻塞,无能为力,因为IO是操作系统实现的,Java代码并没有办法直接接触到操作系统。以下是详细的唤醒方法:

  1. sleep() 方法

  sleep(毫秒),指定以毫秒为单位的时间,使线程在该时间内进入线程阻塞状态,期间得不到cpu的时间片,等到时间过去了,线程重新进入可执行状态。(暂停线程,不会释放锁)

  2.suspend() 和 resume() 方法:。

  挂起和唤醒线程,suspend e()使线程进入阻塞状态,只有对应的resume e()被调用的时候,线程才会进入可执行状态。(不建议用,容易发生死锁)

  3. yield() 方法:

  会使的线程放弃当前分得的cpu时间片,但此时线程任然处于可执行状态,随时可以再次分得cpu时间片。yield()方法只能使同优先级的线程有执行的机会。调用 yield()的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。(暂停当前正在执行的线程,并执行其他线程,且让出的时间不可知)

  4.wait() 和 notify() 方法

  两个方法搭配使用,wait()使线程进入阻塞状态,调用notify()时,线程进入可执行状态。wait()内可加或不加参数,加参数时是以毫秒为单位,当到了指定时间或调用notify()方法时,进入可执行状态。(属于Object类,而不属于Thread类,wait()会先释放锁住的对象,然后再执行等待的动作。由于wait()所等待的对象必须先锁住,因此,它只能用在同步化程序段或者同步化方法内,否则,会抛出异常IllegalMonitorStateException.)

  5.join()方法

  也叫线程加入。是当前线程A调用另一个线程B的join()方法,当前线程转A入阻塞状态,直到线程B运行结束,线程A才由阻塞状态转为可执行状态。

 

  以上是Java线程唤醒和阻塞的五种常用方法,不同的方法有不同的特点,其中wait() 和 notify()是其中功能最强大、使用最灵活的方法,但这也导致了它们效率较低、较容易出错的特性,因此,在实际应用中应灵活运用各种方法,以达到期望的目的与效果!

分享到:
评论

相关推荐

    Java线程唤醒与阻塞常用方法共2页.pdf.zip

    Java线程唤醒与阻塞常用方法共2页.pdf.zip

    java 同步阻塞并唤醒指定线程

    java 多线程 同步阻塞 唤醒

    唤醒阻塞休眠线程示例

    标题“唤醒阻塞休眠线程示例”和描述“如何唤醒或者退出被阻塞,休眠的线程,非TerminateXXX方法”提示我们要探讨的是如何优雅地管理线程状态,而不是粗暴地终止它们。下面将详细介绍相关知识点: 1. **线程状态**...

    Java 线程常用方法总结

    Java线程是并发编程的核心部分,它允许程序同时执行多个任务。在Java中,线程的创建和管理涉及几个关键方法以及一个关键字:`run()`, `start()`, `wait()`, `notify()`, `notifyAll()`, `sleep()`, `yield()`, `join...

    java线程实例 各种小Demo

    Java线程有五种状态:新建、可运行、运行、阻塞和终止。可以通过Thread类的getState()方法查看线程状态。线程的控制包括: - sleep():使当前线程进入休眠状态,指定时间后自动唤醒。 - join():让当前线程等待另一...

    java线程状态转换图

    * 等待队列状态的线程对象必须依靠其他线程调用 notify() 或 notifyAll() 方法才能被唤醒。 终止状态(Dead) * 当线程的 run() 方法或 main() 方法结束后,线程就进入终止状态。 * 在终止状态,线程对象已经执行...

    JAVA多线程操作方法实用大全

    在同步块中,`wait()`使当前线程进入对象的等待池,等待其他线程唤醒。`notify()`唤醒等待池中的一个线程,而`notifyAll()`唤醒所有线程。这三个方法都需要在`Object`类型的对象上调用,因为它们是`Object`类的方法...

    java 实现线程同步的方式有哪些

    在Java中,有多种方式可以实现线程同步,确保在任何时刻只有一个线程能够访问特定的共享资源。 1. **同步代码块 (Synchronized Block)**: 同步代码块的语法形式如下: ```java synchronized(同一个数据){ // ...

    操作系统实验 多线程同步与互斥 java编写 有界面

    在“操作系统实验 多线程同步与互斥 java编写 有界面”的实验中,可能需要设计一个图形用户界面(GUI),通过按钮或事件触发线程的创建和同步操作,直观地展示线程间的交互和同步效果。例如,可以模拟银行账户转账,...

    JAVA100例之实例64 JAVA线程间通讯

    在"JAVA100例之实例64 JAVA线程间通讯"这个主题中,我们将深入探讨Java中实现线程间通信的几种主要方法。 1. **共享数据**:最直观的线程间通信方式是通过共享内存空间,即共享变量。只要对共享变量的操作是线程...

    线程的挂起、唤醒和终止

    在Java中,可以使用`Thread.suspend()`方法来挂起线程,但需要注意,这个方法会使得线程陷入阻塞状态,直到被其他线程唤醒。然而,`Thread.suspend()`和相应的`Thread.resume()`方法已不推荐使用,因为它们可能导致...

    java线程同步及通信

    Java线程同步与通信是多线程编程中的关键概念,用于解决并发访问共享资源时可能出现的数据不一致性和竞态条件问题。以下将详细介绍这两个主题,以及如何通过代码示例进行演示。 1. **线程同步**: 线程同步是确保...

    java线程入门,java线程入门

    Java线程是多任务编程的重要概念,特别是在Java这种支持并发执行的高级编程语言中。Java线程允许程序同时执行多个独立的代码段,这极大地提高了程序的效率和响应性。以下是对Java线程入门的详细讲解: 1. **线程的...

    java线程入门

    Java线程是多任务编程的重要概念,特别是在Java这种支持并发执行的编程语言中。线程允许程序中的不同部分并行运行,从而提高了程序的效率和响应性。在Java中,线程可以分为两种类型:用户线程(由应用程序创建)和...

    java线程学习笔记

    Java 线程创建有两种方法: 1. 继承 Thread 类,重写 run 方法:通过继承 Thread 类并重写 run 方法来创建线程,这种方法可以使线程具有自己的执行逻辑。 2. 实现 Runnable 接口:通过实现 Runnable 接口来创建线程...

    java线程入门 Java线程编程很好的入门书

    本文将基于提供的"Java线程入门"资料,深入探讨Java线程编程的基本概念、创建方法以及常见操作,帮助初学者建立起扎实的线程知识体系。 一、线程基础 1. 线程定义:线程是操作系统分配CPU时间的基本单元,一个进程...

    eclipse项目java线程实例

    Java线程是多任务编程的核心概念,特别是在大型的、复杂的软件系统中,如Eclipse这样的集成开发环境(IDE)中的项目。在这个"Eclipse项目java线程实例"中,我们可以深入理解并实践Java线程的创建、管理和同步机制。 ...

    JAVA实现线程间同步与互斥生产者消费者问题

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

    java 多线程课件

    Java还提供了其他线程控制方法,如Thread.yield()让当前线程暂停,让其他线程有机会运行,但不保证一定切换。另外,wait()、notify()和notifyAll()用于线程间通信,这些方法需要在同步块或同步方法中使用,以防止...

    java多线程测试实例

    - 等待(Waiting):线程执行`wait()`方法,等待其他线程唤醒。 - 守护(Timed Waiting):线程在等待一段时间或等待某个事件发生,如`sleep()`或`join()`。 - 结束(Terminated):线程执行完毕或被中断。 5. *...

Global site tag (gtag.js) - Google Analytics