【Java】多线程之生产者与消费者模型

目录

Threadlocal—线程本地方法

生产者与消费者模型

可重入锁


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(){

}

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值