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
最新推荐文章于 2023-02-19 07:15:13 发布