synchronied 与 lock 的区别
1,存在上区别:synchronized是jvm关键字,lock是java的一个类
2,锁的获取上区别:synchronized获取锁方式不可修改,lock可以指定获取锁的方式
3,锁的释放上区别:synchronized是代码结束或异常都由jvm释放锁,lock必须自己失败
4,锁的状态上:synchronized不可判断锁状态,lock可以判断锁状态
5,锁类型上:synchronized是不可重入,不可打断,非公平。lock是可重入,可判断,可公平
多线程之间如何通讯
1,wait():释放锁
2,notify():唤醒等待锁的一个线程
3,notifyAll():唤醒等待锁的所有线程
wait() 和 sleep() 的区别?
1,wait()是Object的方法,sleep()是Thread的方法
2,wait()释放获取的锁,sleep()不会释放锁资源
3,wait()、notify()、notifyAll()只能在synchronized中运行,sleep()可以在任何地方运行
4,wait()、notify()、notifyAll()不用捕获异常,sleep()必须捕获异常
notify() 和 notifyAll() 有什么区别?
notify() 是只让等待池中的一个线程进入锁池,但是notifyAll()是让等待池中所有的线程都进入锁池
锁池和等待池有什么区别?
1,想要获取到某个对象的锁,但是获取不到的时候,这些线程将会被阻塞到该对象的锁池中
2,已经获取到某对象的锁,但是调用了wait()方法之后,主动放弃了这个锁,这些线程将会进入该对象的等待池中
3,只有锁池中线程才会竞争获取锁,等待池中的线程不会去主动获取锁
4,只有notify()和notifyAll()方法才能将等待池中的线程划分到锁池中,让其去竞争获取锁,从而再次执行。
网友评论