logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

Java--多线程--阻塞队列

阻塞队列(BlockingQueue)是一种特殊的队列,它在支持队列基本操作(入队、出队)的同时,增加了阻塞当队列满时,生产者线程试图入队会被阻塞,直到队列有空闲位置。当队列空时,消费者线程试图出队会被阻塞,直到队列有元素可用。这种机制完美解决了生产者-消费者模型中的协调问题,避免了开发者手动编写的复杂逻辑。应用场景生产者-消费者模型线程池的任务队列消息中间件中的消息缓冲数据批处理流水线特点有界队

#java#开发语言
Java--多线程--线程安全3

wait()释放的是哪把锁?—— 只释放调用wait()的对象的锁,如果有嵌套同步,其他对象的锁仍持有。notify()后,被唤醒的线程何时执行?—— 需要等待当前线程释放锁,并且被唤醒线程竞争到锁后才能执行。唤醒所有线程,它们是否同时执行?—— 不是,它们需要依次竞争锁,串行执行同步块内的代码。虚假唤醒是 JVM bug 吗?—— 不是,是某些操作系统层面的行为,JVM 规范允许,因此必须处理。

#java#开发语言
Java--多线程--04

线程是程序执行的最小单位,其状态反映了线程在生命周期中的行为。理解这些状态对调试并发问题、避免死锁和提高性能至关重要。Java中,线程状态通过枚举表示,包括:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。每个状态都有特定触发条件和行为,下面我们逐一深入讲解。NEW状态表示线程对象已被创建(例如,通过),但尚未调用start()方法启动。

#java#jvm#开发语言
Java--多线程03

可以看到我们有两个线程,一个是yaya,一个是主线程main,正常情况下我们应该是需要两个线程一起跑的,但是这里我们针对yaya没有调用start方法让它跑起来,也就是说yaya无法执行!就绪队列:[线程1, 线程2, 线程4, 线程5, 线程6, 线程7, 线程9, 线程10, 线程11, 线程12, 线程13, 线程14, 线程16, 线程17, 线程18, 线程19]这里我们换成了for循环

#java
到底了