摘要:
volatile关键字作用域 volatile关键字只能修饰类变量和实例变量,对于方法参数、局部变量以及实例常量,类常量都不能进行修饰! volatile写/读的内存语义 public class ReorderExample { private int x = 0; private int y = 阅读全文
摘要:
为什么会有等待通知机制 无限循环,浪费CPU资源,而解决死锁的思路之一就是 破坏请求和保持条件——多个线程实现互斥访问共享资源时会互相发送信号或等待信号,比如线程等待数据到来的通知,线程收到变量改变的信号等。 医院就医过程: | 序号 | 就医 | 程序解释(自己的视角) | | | | | | 1 阅读全文
摘要:
死锁概念 多个线程互相占用着对方需要的资源:线程A持有R1的锁,并等待R2的锁;线程B持有R2的锁,并等待R1的锁! public class DeadLock { private final Object MUTEX_READ = new Object(); private final Objec 阅读全文
摘要:
多线程数据错误示例:叫号程序 /** * 实现Runnable接口 * @author Chenzf */ public class TicketWindowRunnable implements Runnable { private int index = 1; private final sta 阅读全文
摘要:
概念 CAS全称Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。java.util.concurrent包中的原子类就是通过CAS来实现了乐观锁。 在Java语言之前,并发就已经广泛存在并在服务器领域得到了大量的应用。所以 阅读全文
摘要:
CPU与内存 所有的运算操作都是由CPU的寄存器来完成的,CPU指令的执行过程需要涉及数据的读取和写入操作,CPU所能访问的所有数据只能是计算机的主存(通常是指RAM) 。CPU的处理速度和内存的访问速度差距很大! Cache模型 由于CPU的处理速度和内存的访问速度差距很大,通过传统FSB直连内存 阅读全文
摘要:
线程的命名 Thread的构造函数中,有几个并没有提供为线程命名的参数,那么此时线程会有一个怎样的命名呢? Thread() Thread(Runnable target) Thread(ThreadGroup group, Runnable target) public Thread(Runnab 阅读全文