Java开发:java多线程(一):synchronized 对象锁和类锁的区别

为什么使用synchronized

在多线程中如果多个线程同时访问某一资源,会造成不可预计的结果。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块。

synchronized 什么时候是对象锁:

当synchronized 作用在非静态的方法时是对象锁

 synchronized public void getName() { }

对象锁的特征:

1.同个对象在多个线程中去调用synchronized作用的代码块、方法时需要获取对象锁。一个对象的对象锁是唯一的,只有一个线程可以拿到,因此当有线程在执行synchronized的方法时,其他线程需要进入阻塞队列等待。
2.同个对象在多个线程中去调用不同的synchronized方法时也是需要等待。

我们来验证一下:

public class Test {
	synchronized public void getMessage(){
	for(int i = 0;i<10;i++){
		System.out.println("线程:"+Thread.currentThread().getName()+","+i);

	}
}
}

Test 类中有个synchronized 修饰的方法,方法体输出循环输出0到10,并打印当前线程的名称。


public class MyThread extends Thread{
	
	static Test test = new Test();

	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		test.getMessage();
	}
}

我们继承Thread类,MyThread拥有一个静态的成员变量Test ,这样做事为了确保不同的线程执行run()的时候都是调用同一个Test对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值