在Java中,wait()
方法是Object
类的一个方法,用于让当前线程等待,直到其他线程调用该对象的notify()
或notifyAll()
方法。在多线程协作中,wait()
和notify()
/notifyAll()
方法是非常重要的,它们允许线程之间进行有效的通信和协作。
以下是一个简单的示例,展示了如何使用wait()
和notify()
方法进行多线程协作:
public class SharedResource { private boolean resourceAvailable = false; public synchronized void waitForResource() throws InterruptedException { System.out.println(Thread.currentThread().getName() + " is waiting for the resource."); wait(); // 当前线程等待,直到资源可用 System.out.println(Thread.currentThread().getName() + " has acquired the resource."); } public synchronized void releaseResource() { System.out.println(Thread.currentThread().getName() + " is releasing the resource."); resourceAvailable = true; notify(); // 通知等待的线程资源可用 } } public class WorkerThread extends Thread { private SharedResource sharedResource; public WorkerThread(SharedResource sharedResource) { this.sharedResource = sharedResource; } @Override public void run() { try { sharedResource.waitForResource(); // 等待资源 // 在这里执行使用资源的操作 } catch (InterruptedException e) { e.printStackTrace(); } } } public class Main { public static void main(String[] args) { SharedResource sharedResource = new SharedResource(); WorkerThread workerThread1 = new WorkerThread(sharedResource); WorkerThread workerThread2 = new WorkerThread(sharedResource); workerThread1.start(); workerThread2.start(); try { Thread.sleep(2000); // 让主线程休眠2秒,以便其他线程有机会运行 } catch (InterruptedException e) { e.printStackTrace(); } sharedResource.releaseResource(); // 释放资源 } }
在这个示例中,我们有一个名为SharedResource
的类,它包含一个布尔变量resourceAvailable
和一个同步方法waitForResource()
。waitForResource()
方法使用wait()
让当前线程等待,直到资源可用。另一个同步方法releaseResource()
将资源设置为可用,并使用notify()
通知等待的线程。
WorkerThread
类继承了Thread
类,并在其run()
方法中调用waitForResource()
方法。在main()
方法中,我们创建了两个WorkerThread
实例,并启动它们。主线程休眠2秒,以便其他线程有机会运行。然后,主线程调用releaseResource()
方法释放资源,这将导致等待的线程继续执行。
这个示例展示了如何使用wait()
和notify()
方法进行多线程协作。在实际应用中,你可能需要根据具体需求调整代码。