1、现有一个简单类UserVo,有两个打印方法。
package main.java.com.ji.test; public class UserVo { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public synchronized void printName() { System.out.println("name ....in ...."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("name .... = "); } public synchronized void printAge() { System.out.println("age .... in ...."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("age .... = "); } }
另写了一个测试类
package main.java.com.ji.test; public class MyThread implements Runnable { private UserVo userVo; public MyThread(UserVo userVo) { this.userVo = userVo; } @Override public void run() { userVo.printName(); } public static void main(String[] args) { UserVo userVo = new UserVo(); userVo.setAge(99); userVo.setName("admin....xxx"); UserVo userVo2 = new UserVo(); userVo2.setAge(99222); userVo2.setName("222admin....xxx"); for (int i = 0; i < 10; i++) { new Thread(new MyThread(userVo)).start(); new Thread(new MyThreadAge(userVo)).start(); } } } class MyThreadAge implements Runnable { private UserVo userVo; public MyThreadAge(UserVo userVo) { this.userVo = userVo; } @Override public void run() { userVo.printAge(); } }
2、如果想执行
for (int i = 0; i < 10; i++) { new Thread(new MyThread(userVo)).start(); new Thread(new MyThreadAge(userVo)).start(); }
循环的时候,每个单独的printName和printAge不被打断的话,两个方法前需加关键字synchronized
3、、如果想执行
for (int i = 0; i < 10; i++) { new Thread(new MyThread(userVo)).start(); new Thread(new MyThreadAge(userVo2)).start(); }
循环的时候,每个单独的printName和printAge不被打断的话,两个方法前需加关键字 static synchronized
相关推荐
本测试案例深入探讨了`synchronized`的使用方法,包括同步单个对象、同步多个对象以及成功与失败的场景对比。 一、`synchronized`关键字的基本概念 `synchronized`关键字可以修饰方法或用作代码块,其主要作用是...
在实际开发中,我们可以通过编写测试示例来验证`synchronized`的效果。例如,我们可以创建两个线程,一个线程负责加一操作,另一个线程负责减一操作,通过`synchronized`控制并发执行的顺序,确保结果的正确性。 五...
通常,我们可以通过编写测试类`TestSynchronized`来实践`synchronized`的使用。例如,创建两个线程,分别访问一个共享的`synchronized`方法,观察其执行顺序和结果,以此验证同步的效果。 总结,`synchronized`是...
通常,`GenerateCode.java`会定义包含`synchronized`的关键类或方法,而`SynchronizedTest.java`会创建多个线程来测试并发访问,观察`synchronized`的效果。 总结,`java synchronized demo`是一个关于如何在Java中...
面试中,考察对synchronized和ReentrantLock的理解通常是测试候选人并发编程基础的关键点。除了了解基本使用和案例外,深入理解它们的底层实现,如锁膨胀、降级,以及轻量级锁、重量级锁、自旋锁和偏斜锁等概念,...
3. **测试运行:** ```java public static void main(String[] args) { CounterThread t1 = new CounterThread(1); CounterThread t2 = new CounterThread(2); t1.start(); t2.start(); } ``` 通过以上案例...
7. **项目结构**:根据描述,这是一个完整的工程项目,因此除了核心的生产者消费者逻辑,还可能包含测试类(如`07_12_Test3`),配置文件,以及可能的Maven或Gradle构建文件等。 总的来说,这个项目提供了一个学习...
"Synchronized与Lock"这个主题探讨了两种主要的同步机制:synchronized关键字和Lock接口(包括其实现类如ReentrantLock)。这两种机制都用于实现线程间的互斥访问,但它们在功能、灵活性和性能上有所差异。 首先,...
### Lock接口与synchronized关键字详解 #### 一、概述 在Java并发编程中,Lock接口与synchronized关键字都是实现同步的重要工具。...- 对于性能敏感的场景,应考虑实际测试不同同步机制的表现,以便做出最佳选择。
本测试主要关注`synchronized`关键字的使用,以及它如何影响线程同步和线程执行顺序。 `synchronized`关键字是Java中用于实现线程同步的关键机制,它确保同一时间只有一个线程可以执行特定的代码块或方法。当一个...
#### 四、自定义锁测试 为了验证自定义锁的效果,我们可以创建多个线程同时尝试获取锁,并观察其行为。 ```java public class LockTest { private static final ShadowLock lock = new ShadowLock(); public ...
- **多线程**:Java提供了丰富的并发工具,如Thread类、Runnable接口、synchronized关键字、volatile变量和java.util.concurrent包。 - **集合框架**:ArrayList、LinkedList、HashMap、HashSet等是Java编程的基础...
- **文件管理**:包括打开干扰文件或打开应力测试文件等操作。 以上内容概述了Synchronized Phasor Measurements (SPM) 应用程序用户指南的主要知识点,这些信息对于理解和应用SPM技术具有重要意义。
5. 多线程编程,包括同步机制(synchronized关键字、wait/notify)。 6. 文件和I/O流操作,以及NIO(非阻塞I/O)的概念。 7. Java反射机制和泛型的理解。 软件测试是确保产品质量的关键环节,面试可能关注: 1. ...
3. **多线程**:了解线程的概念,掌握Thread类和Runnable接口,知道同步机制(synchronized关键字,wait/notify机制,Lock接口等)以及并发工具类如ExecutorService、Semaphore、CountDownLatch等。 4. **Java测试...
- **多线程**:了解并发编程,掌握synchronized、volatile等关键字。 9. **面试技巧** - **自我介绍**:突出个人优势,展现项目经验。 - **问题解答**:清晰、有逻辑地回答问题,展示问题解决能力。 - **沟通...
文档中提供了两个测试方法,展示了在创建锁对象前后是否进行休眠4秒对偏向锁的影响。如果没有休眠,对象可能直接从无锁状态升级为轻量级锁;如果休眠4秒,对象会被赋予偏向锁。 总结来说,Java synchronized机制是...
Java并发系统动态测试工具是一个强大的资源,用于检查和分析多线程程序在运行时的行为。这个工具基于Java语言,能够帮助开发者深入理解并发程序的工作原理,发现并修复潜在的线程安全问题,如竞态条件、死锁和活锁等...
此外,为了确保数据的一致性和安全性,开发者可能使用了同步机制,如synchronized关键字或锁对象。 最后,软件工程的实践也是不容忽视的。良好的代码组织结构、注释和文档,以及遵循设计模式(如单例模式、工厂模式...