08_证明:synchronized是对象锁

过程:

1.写一个类MyObjcet,里面有两个方法,methodA和methodB。

2.synchronized声明methodA类是同步的,B类不声明。

3.写两个线程类 ThreadA和TheadB,分别调用methodA和methodB

4.写主函数,运行代码,注意:两个线程要访问同一个对象,否则相当于异步执行。

5.检查结果,然后把B类也声明,再次运行,检查结果。


代码:


MyObjcet.java(这里直接加同步了)

package synchronizedMethodLockObject;

public class MyObject {

	synchronized public void methodA(){
		try {
			System.out.println("begin methodA threadName=" + Thread.currentThread().getName());
			Thread.sleep(5000);
			System.out.println("end endTimeA" + System.currentTimeMillis());
			
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	synchronized public void methodB(){
		try {
			System.out.println("begin methodB threadName=" + Thread.currentThread().getName());
			Thread.sleep(5000);
			System.out.println("end endTimeB" + System.currentTimeMillis());
			
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


ThreadA.java

package synchronizedMethodLockObject;

public class ThreadA extends Thread{

	private MyObject object;
	ThreadA(MyObject object){
		this.object = object;
	}
	@Override
	public void run(){
		object.methodA();
	}
}

ThreadB.java

package synchronizedMethodLockObject;

public class ThreadB extends Thread{

	private MyObject object;
	ThreadB(MyObject object){
		this.object = object;
	}
	@Override
	public void run(){
		object.methodB();
	}
}


 Run.java  (要使用同一对象)

package synchronizedMethodLockObject;

public class Run {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		MyObject object = new MyObject();
		ThreadA a = new ThreadA(object);
		a.setName("A");
		ThreadB b = new ThreadB(object);
		b.setName("B");
		a.start();
		b.start();
	}

}


结果对比:

不声明methodB:

begin methodB threadName=B
begin methodA threadName=A
end endTimeA1513150686375
end endTimeB1513150686376


声明methodB:

begin methodA threadName=A
end endTimeA1513150719053
begin methodB threadName=B
end endTimeB1513150724054




  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值