监测一个类里面有两个synchronized方法是否可以同步执行

今天面试,一个类里面有两个synchronized方法是否可以同步执行?我回答说可以同步执行,因为synchronized是在方法上锁定,又不是在类上锁定,可面试官说我错了,回家后写测试代码如下:
/**
* Copyright description
*/
package lock;

/**
* To Add descript here
* 检测一个对象里面有两个Synchronized方法,是否可以同步执行
*
* @author think
* @since 2012-1-14
*/
public class SychronizedMethod {
private int testNum=10;
public synchronized void test1(){
System.out.println("test1 entry");
testNum = 11;
System.out.println("test1 out");
}
public synchronized void test2(){
System.out.println("test2 entry");
testNum = 12;
System.out.println("test2 out");
}

public static void main(String[] args){
SychronizedMethod sychronizedMethod = new SychronizedMethod();
WorkHandler handler = new WorkHandler(sychronizedMethod);
WorkHandler1 handler1 = new WorkHandler1(sychronizedMethod);
Thread t1 = new Thread(handler);
Thread t2 = new Thread(handler1);
t1.start();
t2.start();

}
}

/**
* Copyright description
*/
package lock;

import java.util.concurrent.atomic.AtomicInteger;

/**
* To Add descript here
*
* @author think
* @since 2012-1-14
*/
public class WorkHandler implements Runnable {

private SychronizedMethod syn;

//AtomicInteger id = new AtomicInteger();

WorkHandler(SychronizedMethod syn){
this.syn = syn;
}

/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
System.out.println("test2 entry");
syn.test2();
System.out.println("test2 out");
}

}

/**
* Copyright description
*/
package lock;

import java.util.concurrent.atomic.AtomicInteger;

/**
* To Add descript here
*
* @author think
* @since 2012-1-14
*/
public class WorkHandler1 implements Runnable {

private SychronizedMethod syn;

//AtomicInteger id = new AtomicInteger();

WorkHandler1(SychronizedMethod syn){
this.syn = syn;
}

/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
System.out.println("test1 entry");
syn.test1();
System.out.println("test1 out");
}

}


事实证明,我错了!!!

翻看相关书籍,发现jvm在执行方法以前,如果发现该方法前面有对象的synchronized关键字,就现在该对象的ID上加锁,当其他线程执行同时执行这个方法时,会检测改对象ID上是否加锁,如果加锁时就等待锁释放。

哈哈,面试了一次长见识了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值