当前位置:首页>开发>正文

JAVA中的内锁机制是什么 java 锁的本质是什么

2023-06-28 17:28:07 互联网 未知 开发

 JAVA中的内锁机制是什么 java 锁的本质是什么

JAVA中的内锁机制是什么

多线程同步的实现最终依赖锁机制。我们可以想象某一共享资源是一间屋子,每个人都是一个线程。当A希望进入房间时,他必须获得门锁,一旦A获得门锁,他进去后就立刻将门锁上,于是B,C,D...就不得不在门外等待,直到A释放锁出来后,B,C,D...中的某一人抢到了该锁(具体抢法依赖于JVM的实现,可以先到先得,也可以随机挑选),然后进屋又将门锁上。这样,任一时刻最多有一人在屋内(使用共享资源)。 Java语言规范内置了对多线程的支持。对于Java程序来说,每一个对象实例都有一把“锁”,一旦某个线程获得了该锁,别的线程如果希望获得该锁,只能等待这个线程释放锁之后。获得锁的方法只有一个,就是synchronized关键字。

java 锁的本质是什么

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

这里有个资料你看一下 很生动
http://www.infoq.com/cn/articles/java-memory-model-5

如何使用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的加锁机制的问题,简单回答一下就好

每个对象有唯一的一把锁。锁被某个线程获得后,其他线程会阻塞等待,直到锁被释放且获得。
语法 synchronize(对象){ .... },意思就是当前线程需要获得该对象的锁才能运行之后同步块中的代码,没获得就阻塞等待。 这样就避免对该对象同时有多个线程读写,造成数据不同步的问题,从而实现了“同步synchronization”

java多线程,对象锁是什么概念?

对象锁。同一时间只保证 一个线程访问方法或变量。
在Java语言中,通过被关键字synchronized修饰的方法或synchronized语句块实现对代码的同步
包含在synchronized方法或语句块中的代码称为被同步的代码(Synchronized Code)
当线程访问被同步的代码时,必须首先竞争代码所属的类的【对象上的锁】,否则线程将等待(阻塞),直到锁被释放.
------------------------------------------------------------------------------------
我们上课用的PPT 上截取的例子如下:
同步语句(synchronized statements)的一般形式如下:
synchronized(<锁对象引用>){
…被同步的代码…
}
同步语句提供了比被同步的方法更细粒度(finer granularity)的锁机制,增强了类的并发性.
------------------------------------------------------------------------------------
比如 售票 票数是一定的,售票的人很多。如何保证 票数及时更新 这就需要 同步方法了。

最新文章