日期:2011-03-22 16:13:00 来源:本站整理
Java中操纵synchronized和Lock对象得到对象锁[Java编程]
本文“Java中操纵synchronized和Lock对象得到对象锁[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在并发环境下,办理同享资源冲突问题时,可以考虑利用锁机制.
1.对象的锁
全部对象都自动含有单一的锁.
JVM负责跟踪对象被加锁的次数.假如一个对象被解锁,其计数变成0.在任务(线程)第一次给对象加锁的时刻,计数变成1.每当这个相同的任务(线程)在此对象上得到锁时,计数会递增.
只有首先得到锁的任务(线程)才能持续获得该对象上的多个锁.
每当任务脱离一个synchronized办法,计数递减,当计数为0的时刻,锁被完好释放,此时别的任务便可以利用此资源.
2.synchronized同步块
2.1同步到单一对象锁
当利用同步块时,假如办法下的同步块都同步到一个对象上的锁,则全部的任务(线程)只能互斥的进入这些同步块.
Resource1.java演示了三个线程(包含main线程)试图进入某个类的三个差别的办法的同步块中,固然这些同步块处在差别的办法中,但由于是同步到同一个对象(当前对象 synchronized (this)),所以对它们的办法仍然是互斥的.
Resource1.java
package com.zj.lock;
import java.util.concurrent.TimeUnit;
public class Resource1 {
public void f() {
// other operations should not be locked...
System.out.println(Thread.currentThread().getName()
+ ":not synchronized in f()");
synchronized (this) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()
+ ":synchronized in f()");
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void g() {
// other operations should not be locked...
System.out.println(Thread.currentThread().getName()
+ ":not synchronized in g()");
synchronized (this) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()
+ ":synchronized in g()");
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void h() {
// other operations should not be locked...
System.out.println(Thread.currentThread().getName()
+ ":not synchronized in h()");
synchronized (this) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()
+ ":synchronized in h()");
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
final Resource1 rs = new Resource1();
new Thread() {
public void run() {
rs.f();
}
}.start();
new Thread() {
public void run() {
rs.g();
}
}.start();
rs.h();
}
}
以上是“Java中操纵synchronized和Lock对象得到对象锁[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论