继上篇并发编程三大原则之后:
我们来分别看看,到底是如何保证的,java是如何做到原子性的。
试想一下这样一个场景,我想吃一个苹果,那么如果保证我吃苹果的时候,不被人打扰,要是我的话,我肯定是跑到一个没有人的地方偷偷的吃完再回来,那么还有什么其他的方式吗,想一想其实就知道了,直接拿着苹果,把自己锁在房间里面,吃完了再出来,这样别人就不会惦记了吧。恭喜你只要你没有把苹果吃完,别人是不会打扰到你的,因为你已经把房间给上了一把锁,在你没有释放这把锁的时候,别人压根就用不了。
没有错我想 java 工程师在设计 java 中锁的时候,是不是也是正在吃苹果呢?。。。。。。
那么我们现实中的锁是什么,有金属的,有木头的,还有塑料的,等等,那么我们锁是用在什么上面的呢,一般情况下锁都是用在门上面,不要抬扛哈。只考虑一般情况。
那么 java 中锁又是什么样子的呢?
又是用在什么上面的呢?
java 是一个面向对象的编程语言,那么在 java 中,一切对象都可以是一把锁。一切对象,一切对象,对你没有听错就是一切对象。
那么锁有了,我要怎么用起来呢,那么这里面就不得不提到我们 java 中,大名鼎鼎的一个关键字
synchronized
名气太大,单独放一行,就为了这个关键字,java 工程师,那些大胡子哥,也是费了老劲了,一直在做优化。
那么现在大家知道了吗。
锁就是用在这个上面的,那么我们看一下代码。这个关键字可以用在不同的两个地方:
1,修饰代码块。
2,修饰方法。
上代码
public class Demo {
static Object lock = new Object();
public static void main(String[] args) {
// 这个是修饰的代码块
synchronized (lock) {
}
}
// 这个是修饰方法
public static synchronized void test() {
}
}
那么我们用上面吃苹果的列子先看一下这个代码:
今天先简单的理解一下 synchronized 这个关键字是干嘛后面再慢慢的升入。一点一点才能好吸收,不能一口吃个胖子,希望这样能好理解。