加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 07:49:01 所属栏目:Java 来源:网络整理
导读:一共有3类锁 ,方法锁、对象锁、类锁。(方法锁也是对象锁的一种) 一、对象锁 对象锁 public class object { private Lock lock = new ReentrantLock();//JavaSE1.5.新增了一个java.util.concurrent包来支持同步 public void method(){ synchronized(this){
一共有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("我是第二种类锁");
}
}
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读