「java锁的传递」java 锁的使用

博主:adminadmin 2022-12-03 17:24:06 73

本篇文章给大家谈谈java锁的传递,以及java 锁的使用对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA锁机制 有小例子说明最好!

java锁一定要保证锁住的是同一个对象。

一般来说,在方法上上锁,可以用常量字符串,或者静态字符串。看下面的例子。

public class SynTest{

private static String lock = "lockA";

private String a = "abc";

public String setA(String newStr){

/* 因为lock是静态变量,所以只要是SynTest类对象访问该方法时,都会争取这把锁

* 如果lock是成员变量的话,每个SynTest类对象都会有自己的lock变量,那样是锁不

* 上的*/

synchronized(lock){

a = newStr;

}

}

}

当然了,除了上面的方法,还可以使用最新的ReadWriteLock,它的实现与synchronized类似,但都要保证访问的是同一把锁。

java 锁的本质是什么

锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。

这里有个资料你看一下 很生动

如何使用java的锁机制

可以在临界区代码开始的位置执行Lock类的lock方法,为代码块加锁,而在临界区的出口使用相同Lock实例的unlock方法,释放临界区资源。

Demo2-12中,主线程先创建了一个lockTest对象test,然后将相同的test对象交给两个不同的线程执行。子线程1获取到了lock后,开始执行before sleep输出语句,遇到sleep后,线程1阻塞将会放弃执行权,这时线程2可以获取执行权,当线程2执行lock方法时,发现锁已经被别的线程获取,所以线程2阻塞等待lock的释放。线程1从sleep中被唤醒后,将继续执行after sleep语句,之后释放了锁,此时线程2从锁等待中被唤醒,执行临近区的内容,因此Demo2-12的输出是先线程1的两条语句,之后才输出线程2的两条语句。而Demo2-13在没有锁的保护下,程序无法保证先将线程1的两条语句输出后再执行线程2的输出,因此,Demo2-13的输出结果是交叉的。

Java中有哪些锁,区别是什么

【1】公平所和非公平所。

公平锁:是指按照申请锁的顺序来获取锁,

非公平所:线程获取锁的顺序不一定按照申请锁的顺序来的。

//默认是不公平锁,传入true为公平锁,否则为非公平锁

ReentrantLock reentrantLock = new ReetrantLock();

1

2

【2】共享锁和独享锁

独享锁:一次只能被一个线程所访问

共享锁:线程可以被多个线程所持有。

ReadWriteLock 读锁是共享锁,写锁是独享锁。

【3】乐观锁和悲观锁。

乐观锁:对于一个数据的操作并发,是不会发生修改的。在更新数据的时候,会尝试采用更新,不断重入的方式,更新数据。

悲观锁:对于同一个数据的并发操作,是一定会发生修改的。因此对于同一个数据的并发操作,悲观锁采用加锁的形式。悲观锁认为,不加锁的操作一定会出问题,

【4】分段锁

1.7及之前的concurrenthashmap。并发操作就是分段锁,其思想就是让锁的粒度变小。

【5】偏向锁是指一段同步代码一直被一个线程所访问,那么该线程会自动获取锁。降低获取锁的代价

轻量级锁

重量级锁

【6】自旋锁

自旋锁

关于java锁的传递和java 锁的使用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-03,除非注明,否则均为首码项目网原创文章,转载请注明出处。