首页 > 软件开发 > 编程语言 >

java如何管理线程之间的共享状态

来源:互联网 2023-03-17 00:25:38 310

java管理线程之间的共享状态OlD办公区 - 实用经验教程分享!

java如何管理线程之间的共享状态?OlD办公区 - 实用经验教程分享!

工具/原料

  • IntelliJ IDEA
  • jdk1.8

方法/步骤

  • 1

    本片介绍java如何管理线程之间的共享状态OlD办公区 - 实用经验教程分享!

    java如何管理线程之间的共享状态?OlD办公区 - 实用经验教程分享!

  • 2

    先看如下示例:OlD办公区 - 实用经验教程分享!

    java如何管理线程之间的共享状态?OlD办公区 - 实用经验教程分享!

    java如何管理线程之间的共享状态?OlD办公区 - 实用经验教程分享!

  • 3

    这个有趣的测试创建了一个新线程, 它采用计数器对象, 并不断地将该值设置为100。在主线程中, 它采用相同的计数器对象, 并将值设置为200。测试随后断言, 该值确实为200。OlD办公区 - 实用经验教程分享!

    java如何管理线程之间的共享状态?OlD办公区 - 实用经验教程分享!

  • 4

    如果你运行这个测试几次, 你会发现它有时通过, 有时它没有通过。同样, 这是因为允许 jvm 在线程运行时进行计划。如果主线程执行设置, 并在 jvm 中断该线程以允许对CounterSetter运行之前进入计数器对象, 则该值仍将设置为100。OlD办公区 - 实用经验教程分享!

    java如何管理线程之间的共享状态?OlD办公区 - 实用经验教程分享!

  • 5

    若要确保在另一个线程尝试读取或写入任何共享状态时不修改该共享状态, 必须锁定该共享状态。下图改进了此测试, 以确保此时间建有器不会干扰测试断言的主线程。OlD办公区 - 实用经验教程分享!

    java如何管理线程之间的共享状态?OlD办公区 - 实用经验教程分享!

    java如何管理线程之间的共享状态?OlD办公区 - 实用经验教程分享!

  • 6

    每个 java 对象都有锁定的能力。通过使用synchronized(object)包围代码, 在任何时候都只允许在该块中执行一个正在运行的线程。在同步块上标记的对象用作锁。在上图示例中, 使用了实际的计数器对象本身。OlD办公区 - 实用经验教程分享!

  • 7

    涉及该计数器实例的任何读取和写入都已被包围在同步块中, 因此, 当主线程正在更新, 然后重新读取计数器的值时, CounterSetter代码不能干扰该值。你会发现, 现在测试总是通过。OlD办公区 - 实用经验教程分享!

    java如何管理线程之间的共享状态?OlD办公区 - 实用经验教程分享!

  • 7此文章非法爬取自百度经验
  • 8

    当然, 这种锁定是有代价的。线程在锁定时需要等待其他线程, 因此您可能会看到性能影响。因此, 建议只锁定读取和写入, 而不是更多, 尽快释放锁。OlD办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!OlD办公区 - 实用经验教程分享!


    标签: JAVA编程语言

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码