当前位置:七道奇文章资讯编程技术Java编程
日期: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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .