21xrx.com
2025-03-26 10:08:25 Wednesday
文章检索 我的文章 写文章
我是一名Java程序员
2023-06-16 16:26:00 深夜i     --     --
for (int i = 0

我是一名Java程序员,一直对Java线程编程非常感兴趣。在我的开发过程中,我发现了一些关键词,对于Java线程编程非常有用,这些关键词是:synchronized、wait 和 notify。下面,我将结合实例演示它们的使用。

首先,让我们看看 synchronized。synchronized 是 Java 语言的关键字之一,它的作用是实现同步访问,使得线程之间可以实现互斥访问。下面是一个代码示例:

public class SynchronizedTest {
  private int count = 0;
  public synchronized void addCount() { // 使用 synchronized 关键字
    for (int i = 0; i < 100; i++) {
      count++;
    }
    System.out.println("count=" + count);
  }
}

在上面的代码中,我们定义了一个共享变量 count,并且使用 synchronized 关键字实现了 addCount 方法的同步访问。这样,当多个线程同时访问 addCount 方法时,只有一个线程能够访问,其它线程需要等待。

接下来,我们看看 wait 和 notify。wait 和 notify 是 Java 提供的两个方法,用于实现线程之间的通信。wait 方法使线程暂停执行,并且释放锁,直到其它线程通过 notify 方法唤醒它。下面是一个代码示例:

public class WaitNotifyTest {
  private final Object lock = new Object();
  public void thread1() throws InterruptedException {
    synchronized (lock) {
      System.out.println("Thread 1 is waiting");
      lock.wait();
      System.out.println("Thread 1 is resumed");
    }
  }
  public void thread2() throws InterruptedException {
    Thread.sleep(1000);
    synchronized (lock) {
      System.out.println("Thread 2 is notifying");
      lock.notify();
    }
  }
}

在上面的代码中,我们定义了两个方法 thread1 和 thread2,它们都使用了 synchronized 关键字锁定了一个对象 lock。在 thread1 方法中,我们使用了 lock.wait() 方法使线程暂停执行,并且释放了锁。在 thread2 方法中,我们使用了 lock.notify() 方法唤醒了线程。执行过程如下:

WaitNotifyTest test = new WaitNotifyTest();
new Thread(test::thread1).start();
new Thread(test::thread2).start();

输出结果如下:


Thread 1 is waiting

Thread 2 is notifying

Thread 1 is resumed

通过上面的例子,我们了解了 synchronized、wait 和 notify 这三个关键词的用法。在实际的开发中,我们要灵活使用它们,使得线程间交互更加安全和高效。

  
  

评论区