专项复习1-锁,单例模式

1.synchronized上锁的资源只有两类:一个是对象,一个是类。 即synchronized底层其实就是给对象或者类上锁

synchronized 加锁是加给某个对象的( 若是static方法则是加给某个类的 )

所以线程在执行带 synchronized 的方法前,必须先获得 synchronized 加的锁。

下面代码是两个线程都对同一个变量i进行加操作,两个线程都是要加100万 次,那么按理说,运行结果应该是200万才对,但是程序运行结果往往是低于200万。而且add()方法还加了synchronized关键字,保证线程安全,但是为什么结果还是少于200万呢?

没有使用同一个对象

正确方式是:Test2 test2 = new Test2();

2. synchronized实现原理?

3. synchronized如何保证原子性,可见性,顺序性?(可重入性)?

4. 可重入锁的实现原理?

5. 尝试利用可重入锁或同步锁实现两个线程交替打印abcd?

synchronized的方法
wait()、notify()和notifyAll()这三个方法都依赖于Java对象的互斥锁。调用这些方法时,当前线程必须持有该对象的互斥锁,所以通常它们三都与synchronized关键字一起使用

当线程调用对象的wait()方法时,它会释放该对象的互斥锁。这允许其他线程能够进入同步代码块或方法,并获得锁以执行其操作。(与此相反sleep方法不会释放互斥锁)

wait()方法通常与notify()或notifyAll()方法一起使用,以在多个线程之间实现协作。一个线程可以调用wait()来等待另一个线程

而另一个线程可以在条件成立后

调用notify()或notifyAll()来唤醒使用wait()而休息的线程。

使用方法

(任务1)synchronized ( Object o) {o.wait(); ……}

(任务2)synchronized ( Object o) {……o.notify(); }

6. synchronized的锁升级?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值