江明涛的博客
Java 线程的等待与通知
Java 线程的等待与通知

Java 线程的等待与通知

在Java编程中,线程是一种重要的概念。线程允许我们同时执行多个任务,提高了程序的执行效率。然而,在多线程编程中,线程之间的协调和同步是非常重要的。

Java提供了等待和通知机制来实现线程之间的协调。线程可以通过等待机制暂停自己的执行,直到某个条件满足为止。而通知机制则可以唤醒一个等待状态的线程。

等待和通知机制是通过对象的监视器来实现的。每个Java对象都可以充当监视器,通过使用synchronized关键字来实现对监视器的锁定。

当一个线程在synchronized块中执行wait()方法时,它会释放该对象的锁,并进入等待状态。该线程将一直等待,直到其他线程使用同一个对象的notify()或notifyAll()方法唤醒它。

下面是一个示例代码,演示了等待和通知机制的使用:

// 定义一个共享资源 class SharedResource { private boolean isReady = false; // 等待资源就绪 synchronized void waitForReady() { while (!isReady) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } // 通知其他线程资源已经就绪 synchronized void notifyReady() { isReady = true; notifyAll(); } } // 定义一个等待线程 class WaitThread implements Runnable { private SharedResource resource; WaitThread(SharedResource resource) { this.resource = resource; } public void run() { resource.waitForReady(); System.out.println("资源已经就绪!"); } } // 定义一个通知线程 class NotifyThread implements Runnable { private SharedResource resource; NotifyThread(SharedResource resource) { this.resource = resource; } public void run() { try { Thread.sleep(2000); // 模拟耗时操作 } catch (InterruptedException e) { e.printStackTrace(); } resource.notifyReady(); } } // 主程序 public class ThreadWaitNotifyExample { public static void main(String[] args) { SharedResource resource = new SharedResource(); Thread waitThread = new Thread(new WaitThread(resource)); Thread notifyThread = new Thread(new NotifyThread(resource)); waitThread.start(); notifyThread.start(); } }

上述代码中,定义了一个共享资源类SharedResource,其中包含了waitForReady()和notifyReady()方法。WaitThread和NotifyThread分别负责等待和通知资源的就绪状态。

在主程序中,我们创建了一个SharedResource对象,并启动了一个WaitThread和一个NotifyThread。当NotifyThread休眠一段时间后,调用SharedResource的notifyReady()方法来唤醒WaitThread。

通过等待和通知机制,WaitThread可以在资源就绪后继续执行,实现了线程之间的同步与协调。

总之,等待和通知机制是Java中实现线程同步与协调的重要手段。合理使用等待和通知机制可以确保多线程程序的正常执行,提高程序的效率。