同步代码块、同步方法以及同步锁的语法

1.同步代码块

在Thread子类run()方法代码块之外套一个下面的代码

synchronized(obj)
{
...
//此处就是原有的run()方法代码块
}

这里的obj就是需要锁定的对象。

2.同步方法

只要在可变类中修改方法上,加上synchronized修饰即可。

注:同步方法的同步监视器是this。

3.同步锁

先在类中定义锁对象,然后在需要保证线程安全的方法中加锁(锁变量.lock()),最后再在finally块中保证释放锁(锁变量.unlock())

class abc{
//定义锁对象
private final ReentrantLock lock = new ReentrantLock();
//...

//定义需要保证线程安全的方法
public void f(){
//加锁
lock.lock();
try{
//实现代码块
}
 //使用finally块来保证释放锁
finally{
lock.unlock();
}
}
    
}

思考:

以上方法都是为了保证线程安全才存在的,是不是也就意味着只有可变类在多线程的情况下,才需要使用到这些方法。

原文地址:https://www.cnblogs.com/moonpool/p/5480593.html