JUC

本文深入探讨Java并发编程的关键概念,包括线程的六种状态、synchronized与lock的使用及区别、生产者和消费者问题的解决、以及线程池、阻塞队列等高级同步工具的运用。同时,解析了volatile关键字如何确保变量的可见性和禁止指令重排,以及Java内存模型的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Volatile 

是java虚拟机提供轻量级的同步机制

 

线程6个状态

  1. new
  2. runnable
  3. blocked
  4. waiting
  5. timed_waiting
  6. terminated

Synchronized

锁 对象/class

lock

公平锁/非公平锁(默认)

区别:

Sync

线程之间的通信问题:生产者和消费者问题

wait(),notifyAll()

虚假唤醒

if改成while 

 

condition

await 等待

signal 唤醒

 

lock.lock()/lock.unlock()

1、锁的是方法的调用者(对象 ),先获取锁的先执行 

2、普通方法(没加锁)

 

Callable

  1. 可以有返回值
  2. 可以抛出异常
  3. 方法不同;call、run

线程启动的方式,有且仅有一个,就是 Thread.start

 

细节:

1、有缓存

2、会阻塞,结果需要等待

 

减法计数器:

countDownLatch.countDown();

countDownLatch.aWare();

 

加法计数器

Cyclicbarrier

 

信号量

Semaphore

 

readWriteLock 读写锁

独占锁、共享锁

写只能一个线程执行

读可以多个线程执行

 

BlockingQueue(队列的大小 )

阻塞队列

写入:满了

取:空

 

线程池

池化技术

程序的运行,本质:占用系统的资源!优化资源的使用

  1. 降低资源消耗
  2. 提高效率
  3. 方便管理 

线程复 用、控制并发数、管理线程

3大方法

Executor.newSingleThreadExcutor()单个线程

Excutors.newFixedThreadPool(5) 创建固定线程池大小

excutors.newCachedThreadPool() 可伸缩

7大参数

ThreadPoolExecutor 

 

拒绝策略

 

ForkJoin

 

JMM    java内存模型

volatile 是java虚拟机提供轻量级的同步机制

  1. 保证可见性
  2. 不保证原子性
  3. 禁止指令重排(内存屏障)

同步约定

  1.  线程解锁前,必须把共享变量立刻刷回内存
  2.  线程加锁前,必须读取主存中的最新值到工作内存
  3. 加锁和解锁是同一把锁

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值