synchronized与Lock的区别描述错误的是?
A: Asynchronized是java内置关键字,在jvm层面,Lock是个java类;
B: Bsynchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;
C: Csynchronized会自动释放锁(a 线程执行完同步代码会释放锁;b线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
D: Dsynchronized锁适合大量同步的代码的同步问题,Lock锁适合代码少量的同步问题。
A: Asynchronized是java内置关键字,在jvm层面,Lock是个java类;
B: Bsynchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;
C: Csynchronized会自动释放锁(a 线程执行完同步代码会释放锁;b线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
D: Dsynchronized锁适合大量同步的代码的同步问题,Lock锁适合代码少量的同步问题。
举一反三
- 调用object.wait()时,线程先要获取这个对象的锁,当前线程必须与锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用notify(),这样将唤醒原来等待中的线程,然后释放该锁
- 一旦线程调用条件上的await()方法,该锁将自动释放。一旦条件正确,线程将重新获取锁并继续执行。
- 下面关于使用同步代码块描述正确的是( ) A: 同步代码块中的锁对象可以是任意类型的对象 B: 当多个线程共享的锁对象必须是唯一的 C: 锁对象的创建代码不能放到run()方法中 D: 当线程执行同步代码块时,首先会检查锁对象的标志位
- 当wait()方法被调用时,当前线程会释放所持有的锁资源,但是一个线程获得了锁,即使调用sleep()方法进入休眠,也不会释放锁。
- Java线程开发中sleep和wait的区别sleep方法没有释放锁,而wait方法释放了锁