小白教程

 找回密码
 立即注册
小白教程 首页 系列教程 Java系列教程 查看内容

Java多线程

发布者: 小白教程



wait()方法

对wait()方法的调用必须放在synchronized方法或同步块中。

对于当前线程已经获取监视器的对象,必须调用wait()方法。

notify()方法

没有办法唤醒等待集中的特定线程。

例子

  1. public class Main {
  2. private static int myValue = 1;
  3. public static void main(String[] args) {
  4. Thread t = new Thread(() -> {
  5. while (true) {
  6. updateBalance();
  7. }
  8. });
  9. t.start();
  10. t = new Thread(() -> {
  11. while (true) {
  12. monitorBalance();
  13. }
  14. });
  15. t.start();
  16. }
  17. public static synchronized void updateBalance() {
  18. System.out.println("start:" + myValue);
  19. myValue = myValue + 1;
  20. myValue = myValue - 1;
  21. System.out.println("end:" + myValue);
  22. }
  23. public static synchronized void monitorBalance() {
  24. int b = myValue;
  25. if (b != 1) {
  26. System.out.println("Balance changed: " + b);
  27. System.exit(1);
  28. }
  29. }
  30. }

上面的代码生成以下结果。

例2

以下代码显示了上述代码的非同步版本。

  1. public class Main {
  2. private static int myValue = 1;
  3. public static void main(String[] args) {
  4. Thread t = new Thread(() -> {
  5. while (true) {
  6. updateBalance();
  7. }
  8. });
  9. t.start();
  10. t = new Thread(() -> {
  11. while (true) {
  12. monitorBalance();
  13. }
  14. });
  15. t.start();
  16. }
  17. public static void updateBalance() {
  18. System.out.println("start:" + myValue);
  19. myValue = myValue + 1;
  20. myValue = myValue - 1;
  21. System.out.println("end:" + myValue);
  22. }
  23. public static synchronized void monitorBalance() {
  24. int b = myValue;
  25. if (b != 1) {
  26. System.out.println("Balance changed: " + b);
  27. System.exit(1);
  28. }
  29. }
  30. }

上面的代码生成以下结果。

12
上一篇:Java 10 新特性下一篇:Java TCP服务器

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-9-20 06:31 , Processed in 0.017735 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

返回顶部