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

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

创新互联是一家专业提供西安企业网站建设,专注与成都网站制作、网站建设、HTML5、小程序制作等业务。10年已为西安众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

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进阶(8)-并发(多线程锁类)
网页地址:https://www.cdcxhl.com/article46/isjseg.html

成都网站建设公司_创新互联,为您提供网站维护网站设计电子商务动态网站网站设计公司网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司