线程基础3

1.线程的等待和通知机制如何实现

等待通知机制,是指一个线程A调用了对象O的wait方法进入等待状态,而另一个线程调用了对象O的notify或者notifyAll方法,线程A收到通知后从对象O的wait方法返回,进而执行后续操作

锁对象:

- 同步方法

  - 静态方法 : 类.class
  - 实例方法: this

  同步代码块

  ​    写在synchronized括号中的对象

可以通过锁对象调用Object类的方法:

- wait()    让当前线程等待,直到被通知
- wait(long) 让线程等待,直到被通知或时间结束
- notify()  随机唤醒一个线程
- notifyAll()  唤醒所有线程

注意:如果不是锁对象调用上面的方法会出现异常IllegalMonitorStateException

2.什么是生产者消费者模式,解决了什么问题,实现的思路是什么?

是一种设计模式,用于解决两个点(线程、进程、服务器)之间数据通信的协调问题。

生产数据的点叫生产者,使用数据的点叫消费者,生产者和消费者可能存在速度不一致的情况。生产者速度过快,消费者消费速度慢,会浪费大量资源;反过来,消费者速度快,生产者速度慢,消费者浪费时间取等待。

3.阻塞队列是什么,有什么作用?

是一种特殊的集合,会自动阻塞对队列添加或删除数据的线程,也可以自动通知

BlockingQueue接口

put(T) 添加数据到队尾,到临界值阻塞

T take 从队头取出并删除数据,到空时阻塞

常用实现类:

ArrayBlockingQueue 数组结构的阻塞队列

LinkedBlockingQueue 链表结构的阻塞队列

SynchronousQueue 同步机制的队列

4.ThreadLocal是什么,有什么作用?

线程局部变量,也是解决线程同步问题的一种方式

锁机制 多个线程排队访问一个资源 以时间换空间

ThreadLocal 多个线程并发访问自己独立的资源 以空间换时间

5.讲讲强软弱虚引用

强引用: 一般情况下创建的对象

Person person = new Person()

如果对象有引用指向,就不会被垃圾收集,没有引用指向就可能被垃圾收集

person = null;

软引用: SoftReference

如果即将出现OOM,gc会优先回收软引用,比强引用更容易被回收

主要用于缓存

弱引用:WeakReference

只要出现gc,都会进行回收

可以缓存临时数据

虚引用: PhantomReference

形同虚设,不能作为对象的引用使用,主要用于跟踪垃圾收集器的活动

强引用 > 软引用 > 弱引用 > 虚引用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值