多线程
LoseControl啊
全栈
展开
-
java多线程复习与巩固(六)
ConcurrentHashMap 手写一个LUR原创 2020-05-23 18:04:57 · 197 阅读 · 0 评论 -
java多线程复习与巩固(四)
AbstractQueuedSynchronizer (抽象队列同步器)简称AQS AbstractQueuedSynchronizer 是构建其他锁和同步组件的基础数据结构 首先来了解下它的结构 由三部分构成:状态 state 、加锁线程和等待队列构成 初始值 state 为0,加锁线程为null,队列为空。线程1 加锁成功 把state从0设置为1 加锁线程为线程1。 线程1锁释放 线程1在执行完自己的业务逻辑代码之后,就会释放锁!他释放锁的过程非常的简单,就是将AQS内的state变量.原创 2020-05-19 21:12:11 · 190 阅读 · 0 评论 -
java多线程复习与巩固(三)
新建(NEW):新创建的一个线程对象。 可运行(RUNNABLE):也叫就绪状态。线程对象创建后,其他线程(比如main线程)调用该线程的start 方法。该状态的线程位于可运行线程池中,等待被线程调度选择,获取CPU使用权。 运行状态(RUNNING):指线程获取了CPU时间片,执行具体的程序指令。 阻塞(BLOCKED):线程因为某种原因处于阻塞状态,让出了CPU时间片段。 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断) 超时等待(TIMED__WAIT原创 2020-05-18 21:49:05 · 226 阅读 · 0 评论 -
java多线程复习与巩固(二)
synchronized关键字详解 synchronized早期是重量级锁,是因为只要使用synchronized关键字都会调用操作系统内核(用户态——> 内核态)。1.6版本引入偏向锁和自旋锁,这两种类型的锁可以不调用操作系统内核 这样效率就会有所提升。与volatile不同的是synchronized 汇编 执行的是 lock cmpxchg 保证了数据的一致性。 java的每个对象都可以做为锁,具体标签形式有一下三种: 对于普通方法,锁当前实例对象 ...原创 2020-05-17 11:42:51 · 256 阅读 · 0 评论 -
高并发情况下创建多少线程合适
CPU 密集型程序创建多少个线程合适? 计算(CPU)密集型的线程恰好在某时因为发生一个页错误或者因其他原因而暂停,刚好有一个“额外”的线程,可以确保在这种情况下CPU周期不会中断工作。 所以对于CPU密集型程序, CPU 核数(逻辑)+ 1个线程数是比较好的经验值的原因了 I/O密集型程序创建多少个线程合适? 最佳线程数 = (1/CPU利用率)=1 + (I/O耗时/CPU耗时) I/O 密集型程序的最佳线程数就是: 按照上面公式,假如几乎全是 I/O耗时,所以纯理论你就可以说...原创 2020-05-16 17:26:30 · 1031 阅读 · 0 评论 -
java多线程复习与巩固(一)
volatile关键字详解 如果对声明了volatile的变量进行写操作,JVM就会向处理器发送一条Lock前缀的指令,将这个变量所在缓存行的数据写回到系统内存。volatile的两条实现原则:1)Lock前缀指令会引起处理器缓存回写到内存。 在多处理器环境中,LOCK#信号确保在声言该信号期间,处理器可以独占任何共享内存。但是,在最近的处理器里,LOCK#信号一般不锁总线,...原创 2018-05-04 11:35:20 · 310 阅读 · 0 评论