
多线程
文章平均质量分 70
记得我雨
这个作者很懒,什么都没留下…
展开
-
java并发编程的艺术-ReentrantLock公平锁原理分析
lock方法分析 final void lock() { acquire(1); }该lock方法会调用AbstractQueuedSynchronizer的acquire方法 /** * Acquires in exclusive mode, ignoring interrupts. Implemented * by invoking at least once {@link #tryAcquire}, * returning on succ原创 2021-04-27 16:39:40 · 120 阅读 · 0 评论 -
java并发编程的艺术学习笔记-java并发编程的基础
什么是线程 现代的操作系统运行一个程序时,会为其创建一个进程。在一个进程里可以创建多个线程,线程是操作系统调度的最小单元,也叫轻量级进程,这些线程拥有各自的计数器、堆栈和局部变量,并且能够共享内存变量。 现在操作系统基本采用时分的形式调度运行的线程,操作系统会分出一个个时间片,线程会分配到若干个时间片,当线程的时间片用完了就会发生线程的调度,并等待下次分配。线程优先级越高线程分配的时间片数量就越多。线程的状态状态名称说明NEW原创 2021-04-25 16:27:03 · 89 阅读 · 0 评论 -
java并发编程的艺术学习笔记-happens-before
JMM的设计JMM的设计一方面要为程序员提供足够强的内存可见性;另一方面对编译器和处理器的限制要尽可能的放松。对于改变程序结果的重排序,JMM要求编辑器和处理器必须禁止这种重排序。对于不改变程序执行结果的重排序,JMM对编译器和处理器不做要求。只要不改变程序的执行结果(指的是单线程和正确同步的多线程),编译器和处理器怎么优化都可以。happens-before的定义如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而第一个操作的执行顺序排在第二个操原创 2021-04-22 14:53:49 · 236 阅读 · 1 评论 -
java并发编程的艺术学习笔记-volatile和锁的内存语义
volatile写-读的内存语义volatile写内存定义:当写一个volatile内存变量的时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。也就是说当写一个volatile变量的时候,之前共享变量的操作结果要刷新到主内存,之前的操作不能重排序到该操作之后。volatile读内存定义:当读一个volatile内存变量的时,JMM会把线程对应的本地内存置为无效。线程接下来从内存中读取共享变量。也就是说当读一个volatile变量时,会从内存中加载到本地内存中,之后对共享变量的操作的值要重新获原创 2021-04-16 10:39:38 · 99 阅读 · 0 评论