今天面试,一个类里面有两个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上是否加锁,如果加锁时就等待锁释放。
哈哈,面试了一次长见识了
分享到:
相关推荐
java同步synchronized关键字用法示例
java里面synchronized用法
synchronized下的方法控制多线程程序中的线程同步非常方便,这里就来看一下Java使用synchronized修饰方法来同步线程的实例演示,需要的朋友可以参考下
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果 再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class ...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
synchronized可以用来同步静态和非静态方法,下面就具体来看一下Java中synchronized关键字修饰方法同步的用法详解:
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
主要介绍了java多线程编程之Synchronized块同步方法,synchronized关键字又称同步锁,当方法执行完后,会自动释放锁锁,只有一个线程能进入此方法,看看下文中各种例子对synchronized的详细解释
synchronized块来同步一个对象变量,也可以使用synchronized块来同步类中的静态方法和非静态方法,下面使用Synchronized块同步方法
java多线程编程核心技术synchronized实例大全,同步方法,同步语句块,类锁,对象锁全都用代码来展现出来
synchronized 测试案例,同步一个对象或者多个对象的案例均有,还有成功和失败案例的对比
使用synchronized实现多线程同步.pdf
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
Java中的synchronized:同步方法与线程安全
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
.NET多线程同步方法详解(一):自由锁(InterLocked) 本文主要描述在C#中线程同步的方法。...这种方法比较简单,当你在第一个线程运行时想等待第二个线程执行结果,那么你可以让第二个线程Join进来就可以了。