Java多线程实践:同步代码块案例对比 原创 ╰半夏微凉° 2024-10-10 07:00 30阅读 0赞 在Java多线程编程中,同步代码块是一种常用的互斥机制。这里我们将通过一个案例对比来阐述这一点。 **案例一:无同步的线程操作** ```java class Counter { private int count = 0; public synchronized void increment() { count++; } public synchronized int getCount() { return count; } } // 多个线程同时访问Counter实例 Thread t1 = new Thread(() -> { Counter counter = new Counter(); for (int i = 0; i < 5; i++) { counter.increment(); // 直接操作,无同步保护 } })); Thread t2 = new Thread(() -> { Counter counter = new Counter(); for (int i = 0; i < 5; i++) { counter.getCount(); // 不直接修改值,但读取时未同步保护 } }); t1.start(); t2.start(); ``` 在这个案例中,线程`t1`和`t2`同时访问同一个`Counter`实例。由于没有同步代码块进行保护,结果是不可预知的。 **案例二:使用synchronized关键字的同步代码块** ```java class Counter { private int count = 0; public synchronized void increment() { count++; notifyAll(); // 发送通知,等待线程重新进入方法 } public synchronized int getCount() { while (count == 0) { // 确保计数器值不为0 try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } return count; } } // 多个线程同时访问Counter实例 Thread t1 = new Thread(() -> { Counter counter = new Counter(); for (int i = 0; i < 5; i++) { counter.increment(); // 同步代码块保护,确保结果正确 } }); Thread t2 = new Thread(() -> { Counter counter = new Counter(); for (int i = 0; i < 5; i++) { counter.getCount(); // 同样,同步代码块确保读取的值是正确的 } }); t1.start(); t2.start(); ``` 在案例二中,我们为`increment()`和`getCount()`方法添加了`synchronized`关键字,这使得它们在同一时间只能被一个线程访问。 这样做的结果就是无论多个线程同时对同一个实例进行操作,都能够保证数据的完整性和一致性。 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 Java多线程实践:同步代码块案例对比 在Java多线程编程中,同步代码块是一种常用的互斥机制。这里我们将通过一个案例对比来阐述这一点。 **案例一:无同步的线程操作** ```java class Counter ╰半夏微凉°/ 2024年10月10日 07:00/ 0 赞/ 31 阅读
相关 Java多线程同步问题实践案例 在Java中,多线程的同步问题主要体现在以下几个方面: 1. **共享资源竞争**:多个线程同时访问和修改同一个变量(如静态变量或成员变量),就会导致数据不一致。 2. * Bertha 。/ 2024年09月21日 04:54/ 0 赞/ 52 阅读
相关 Java多线程同步问题实践案例 在Java中,多线程同步是为了保证多个线程访问共享资源时不会产生冲突或数据不一致。以下是一些实践案例: 1. **synchronized关键字**: ```java pub 我不是女神ヾ/ 2024年09月16日 03:54/ 0 赞/ 62 阅读
相关 Java多线程并发问题:同步块案例分析 在Java中,多线程并发可能会遇到各种问题,其中之一就是同步问题。这里以一个简单的同步块案例来详细分析。 案例描述: 有两个共享资源变量`counter`(初值为0)和`fl 亦凉/ 2024年09月11日 18:27/ 0 赞/ 66 阅读
相关 java中的多线程、同步代码块、同步方法、锁 一、java中实现多线程的三种方式 (1)继承Thread类的方式进行实现; (2)实现Runnable接口的方式进行实现; (3)利用Callable接口和Fut 清疚/ 2024年03月16日 18:00/ 0 赞/ 69 阅读
相关 Java 多线程同步-同步代码块&&同步方法 我们回忆一下之前的火车票案例: package com.veeja.thread; / @Author veeja 2021/3/2 11:35 拼搏现实的明天。/ 2022年11月05日 00:49/ 0 赞/ 260 阅读
相关 多线程-同步代码块 如果一个对象作为同步代码块的对象,那么该对象同步的代码段和该对象内部通过同步方法或者自身对象的代码段会被同步。 看例子: public class OutClass 本是古典 何须时尚/ 2022年06月10日 00:47/ 0 赞/ 224 阅读
相关 Java_基础—多线程(同步代码块和同步方法) 一、什么情况下需要同步? 当多线程并发, 有多段代码同时执行时, 我们希望某一段代码执行的过程中CPU不要切换到其他线程工作. 这时就需要同步. 如果两段代码是同 梦里梦外;/ 2022年06月09日 09:44/ 0 赞/ 270 阅读
相关 Java多线程系列-------同步函数和同步代码块 上次我们在卖票问题中,抛出了一个问题。当我们的四个窗口也就是四个线程同时开始售票时,就会出现对于共享资源的抢夺问题。关于共享资源的抢夺因为代码不是原子性出现了数值上的 以你之姓@/ 2022年05月16日 01:00/ 0 赞/ 235 阅读
还没有评论,来说两句吧...