Java多线程实战问题:线程同步机制(如synchronized)使用示例

原创 ╰+哭是因爲堅強的太久メ 2024-12-04 15:00 15阅读 0赞

在Java中,synchronized关键字用于实现线程同步。当一个方法需要被多个线程安全地访问时,就需要使用synchronized。

以下是一个简单的示例,我们有一个共享资源类(Resource),两个线程尝试同时修改资源:

  1. public class Resource {
  2. private int count = 0;
  3. synchronized void increment() {
  4. count++;
  5. notifyAll(); // 激活等待的线程
  6. }
  7. public int getCount() {
  8. return count;
  9. }
  10. }
  11. // 线程1
  12. new Thread(() -> {
  13. Resource resource = new Resource();
  14. while (resource.getCount() < 5) { // 直到资源达到5
  15. resource.increment(); // 修改资源
  16. try {
  17. Thread.sleep(100); // 模拟耗时操作
  18. } catch (InterruptedException e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. }).start();
  23. // 线程2
  24. new Thread(() -> {
  25. Resource resource = new Resource();
  26. while (resource.getCount() < 5) { // 直到资源达到5
  27. try {
  28. resource.increment(); // 修改资源,这将使线程1唤醒
  29. Thread.sleep(200); // 模拟耗时操作,保证线程2不会被中断
  30. } catch (InterruptedException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. }).start();

在这个例子中,Resource.increment() 方法是同步的,因为它的实现包含对共享资源的修改。这样,当一个线程正在执行这个方法时,其他试图访问该方法的线程将会被阻塞,直到当前线程完成其操作。

在示例代码中,线程1和线程2分别尝试增加资源的数量,但由于同步机制的作用,它们并不会同时进行修改,而是交替进行。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,15人围观)

还没有评论,来说两句吧...

相关阅读