21xrx.com
2024-11-25 03:15:55 Monday
登录
文章检索 我的文章 写文章
我是一名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 这三个关键词的用法。在实际的开发中,我们要灵活使用它们,使得线程间交互更加安全和高效。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复