并发编程の锁

来源:互联网 发布:spark json rdd 编辑:程序博客网 时间:2024/06/11 01:22

本节包含三个知识点:

1.多线程多个锁

2.对象锁同步

3.对象锁异步

多个线程多个锁:多个线程,每个线程都可以拿到自己指定的锁,分别获得锁之后,执行synchronized方法体的内容。

注意点:关键字synchronized取得的是对象锁,而不是一把代码(方法)当作锁,所以,如果两个对象当作锁,线程获得的是两个不同的锁,他们互不影响。

只有一种情况是相同的锁,即静态方法上加synchronized关键字,表示.class类,类一个级别的锁(独占.class类)

同步:synchronized

同步的概念就是共享,我们要牢记“共享”这俩字,如果不是共享的资源就没有必要进行同步。

异步:synchronized

异步的概念就是独立,相互之间不受到任何制约。就好像我们学习http的时候再页面发起的Ajax请求,我们还可以继续浏览或操作页面的内容,两者之间是没有任何关系。

同步的目的就是为了线程安全,其实对于线程来说,需要满足两个特性:

原子性(同步)

可见性

例如:

A线程先持有Object对象的Lock锁,B线程如果在这个时候调用对象中的同步(synchronized)方法则需等待,也就是同步。

A线程先持有Object对象的Lock锁,B线程可以异步的方式调用对象中的非synchronized修饰的方法


原创粉丝点击