目录
Threadlocal—线程本地方法
用线性探测解决哈希冲突
属于线程私有资源,不与其他线程共享
set( ) 设置线程私有属性值
get( ) 取得线程私有属性值
每个Thread对象内部都有一个Threadlocal.Threadlocal Map(存放元素)该对象属于每个线程自己,因此其保存的内容也是线程私有,在多线程场景下并不共享
生产者与消费者模型
Object : wait( ),notify( )必须搭配synchronized使用,(同步方法或同步代码块)
必须拿到相应对象的锁才能调用,否则抛出IllequalMonitorStateException.
- wait ( ) : 持有锁的线程调用wait( )方法后会一直阻塞,直到有别的线程调用notify( )将其唤醒。
- wait(long timeout):等待一段时间,若还未被唤醒,继续执行,默认单位:ms
- notify( ):唤醒任意一个处于wait的线程(只能唤醒一个)
- 任意一个Object及其子类对象都有两个队列:
同步队列:所有尝试获取该对象Monitor失败的线程,都加入同步队列,排队获取锁
等待队列:已经拿到锁的线程在等待其他资源时,主动释放锁,置入该对象等待队列中,等待被唤醒。当调用notify( )会在等待队列中任意唤醒一个线程,将其置入同步队列尾部,排队获取锁
- notifyAll( ):将等待队列中的所有线程唤醒,并加入同步队列
可重入锁
持有锁的线程可以再次对锁的计数器 +1
public synchronized void testA(){
//线程1
testB();
}
public synchronized void testB(){
}