Java进阶 - 并发(多线程锁类)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java进阶 - 并发(多线程锁类)相关的知识,希望对你有一定的参考价值。

一共有3类锁 ,方法锁、对象锁、类锁。(方法锁也是对象锁的一种)
一、对象锁
对象锁
public class object
private Lock lock = new ReentrantLock();//JavaSE1.5.新增了一个java.util.concurrent包来支持同步
public void method()
synchronized(this)
System.out.println("我是对象锁");


public synchronized void method() //默认使用类实例this当做锁
System.out.println("我是对象锁也是方法锁");

这种机制确保了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中只有一个可执行,从而有效避免了类成员变量的访问冲突

二、类锁
一个class的静态方法和静态变量在内存中只会加载和初始化一份,一旦一个静态的方法被申明为synchronized,此类的所有的实例化对象在调用该方法时,共用同一把锁,称之为类锁。
形式一:
public class object
public static synchronized void method()
System.out.println("我是第一种类锁");

形式二:
public class object
public void method()
synchronized (object.this)
System.out.println("我是第二种类锁");


三、类锁
ReentrantLock
Lock.lock() 当前线程尝试获取一个锁,如果这个锁获取不到,则当前线程会一直休眠直到获取这个锁.
Lock.lockInterruptibly() 让当前线程获取一个锁,如果锁可以用,则直接返回.否则当前线程会一直休眠直到一下两种情况中的其中一个发生:
当前线程获取到这个锁
其他线程打断当前线程, 打断当前线程获取锁的操作是允许的.
Lock.tryLock() 尝试获得一个锁,如果锁是可用的,则直接返回ture,并获取到这个锁.否则,直接返回false
Lock.tryLock(long time, TimeUnit unit) 在某一段时间内尝试获取一个锁,如果锁可用,则直接返回true,否则等待超时返回fasle
Lock.unlock() 释放锁
Lock.newCondition()

以上是关于Java进阶 - 并发(多线程锁类)的主要内容,如果未能解决你的问题,请参考以下文章

Java 多线程进阶-并发协作控制

Java 多线程进阶-并发编程 线程组ThreadGroup

Java 多线程进阶-并发数据结构

Java进阶 - 并发(多线程基本概念)

Java知识体系Java并发编程进阶,多线程和锁底层原理探究

(转)java并发对象锁类锁私有锁