多线程 对象锁的问题
public class Lock02 {
private int i = 0;
public static void main(String[] args) {
Object o = new Object();
Lock02 lock = new Lock02();
new Thread(() -> {
for (int i = 0; i < 100; i++) {
synchronized (o) {
lock.i++;
String name = Thread.currentThread().getName();
System.out.println(lock.i +" :: "+ name);
}
}
}).start();
new Thread(() -> {
for (int i = 0; i < 100; i++) {
synchronized (o) {
lock.i++;
String name = Thread.currentThread().getName();
System.out.println(lock.i +" :: "+ name);
}
}
}).start();
}
}
这是对象锁的测试 为什么打印结果竟然是交错的
1 :: Thread-0
2 :: Thread-0
3 :: Thread-1
4 :: Thread-1
5 :: Thread-1
6 :: Thread-1
7 :: Thread-1
不是获取一个对象锁 方法不执行完 锁不释放吗 这里好像是锁释放了??? 为什么会这样
private int i = 0;
public static void main(String[] args) {
Object o = new Object();
Lock02 lock = new Lock02();
new Thread(() -> {
for (int i = 0; i < 100; i++) {
synchronized (o) {
lock.i++;
String name = Thread.currentThread().getName();
System.out.println(lock.i +" :: "+ name);
}
}
}).start();
new Thread(() -> {
for (int i = 0; i < 100; i++) {
synchronized (o) {
lock.i++;
String name = Thread.currentThread().getName();
System.out.println(lock.i +" :: "+ name);
}
}
}).start();
}
}
这是对象锁的测试 为什么打印结果竟然是交错的
1 :: Thread-0
2 :: Thread-0
3 :: Thread-1
4 :: Thread-1
5 :: Thread-1
6 :: Thread-1
7 :: Thread-1
不是获取一个对象锁 方法不执行完 锁不释放吗 这里好像是锁释放了??? 为什么会这样
...全文
相关推荐
详解java 对象锁与类锁
三、对象锁和类锁的应用对象锁常用于保护实例变量,确保在多线程环境中实例数据的正确性。例如,如果你有一个银行账户类,你可能希望在转账操作中使用对象锁,以防止并发修改导致的数据不一致。
Java多线程之死锁的出现和解决方法
死锁是多线程编程中一个常见的问题,解决死锁需要我们了解死锁的出现原因和解决方法。
[并发并行]_[初级]_[C++实现sychronized方式的对象锁]
了解如何正确使用这些同步工具对于编写高效且可靠的多线程C++程序至关重要。错误的并发控制可能导致各种问题,包括数据损坏、死锁、活锁和饥饿等。
Java对象锁和类锁全面解析(多线程synchronize
Java对象锁和类锁是Java多线程编程中至关重要的概念,它们是通过`synchronized`关键字来实现的,用于确保代码在并发环境下的线程安全。
透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别
,它们都用于解决多线程并发访问的安全问题。


Java SE
