package com.neutron.t02;
/**
* 解说内容:
* synchronized关键字对某个对象进行加锁
* 使用自身对象this作为锁
*/
public class T02 {
private int count = 10;
public void m() {
// 任何线程要执行下面的代码,必须先拿到this这把锁
synchronized (this) {
count --;
System.out.println(Thread.currentThread().getName() + " count:" + count);
}
}
// 任何线程要执行下面的代码,必须先拿到this这把锁
public synchronized void m2() {
count --;
System.out.println(Thread.currentThread().getName() + " count:" + count);
}
}
/*
过程解说:
1.如果想要使用当前类的m方法,那么需要new出来个T02的对象,把自身的对象锁定
2.每次要执行m方法时,需要锁定自身,然后再执行代码块
3.synchronized锁定的是什么内容呢?synchronized锁定的是对象,而非代码块。
4.如果代码开始synchronized(this),那么有简单写法,即在方法上添加关键字synchronized。所以方法m和方法m2是等价的
5.疑问:
每次都是new新的对象,那么锁定不同的对象,因为每次都是不同的对象,那么就是不同的锁?这个没有理解明白
当时如果每次都是某个类的同一个对象,那么就是锁定相同的对象,比如设置为单例模式,就可以确保所有的线程使用的是唯一的锁
*/
thread02 - synchronized
最新推荐文章于 2022-11-30 17:31:02 发布
本文深入探讨了Java中synchronized关键字的使用方式及其背后的锁机制。通过具体的代码示例,解释了如何利用synchronized来实现线程间的同步,并讨论了不同情况下锁的行为差异。

6万+

被折叠的 条评论
为什么被折叠?



