摘要:
2.2及2.3 整数表示及整数运算 无符号数:给定一个整数,假设其二进制长度有w位,那么这w位每一位的值都取0或1,每一位都表示数值; 有符号数:它与无符号数的区别,w位二进制值,第一位表示符号位,0表示整数,1表示负数,后面w-1位表示数值; 原码:符号位加上真值的绝对值, 即用第一位表示符号, 阅读全文
摘要:
2.1 信息存储 最小的可寻址内存单位,是字节,而不是第一章提到的位。虚拟内存被视为一个非常大的字节数组,内存的每个字节都有一个唯一的数字来标识,称它为地址,所有可能地址的集合则称为虚拟地址空间。 2.1.1 十六进制表示法 十六进制转二进制: 二进制转十六进制:(最左边一组少于4位,补0) 十进制 阅读全文
摘要:
1.1 信息就是位+上下文 位的理解:源程序如hello.c,实际上是由值0和1组成的位,8个位组成一组,成为字节,如00011000。每个字节表示程序中的某些文本字符,每个字节都有一个整数值。如‘\n’,它的整数值为10,即00001010。若文件由有ASCII字符构成,则称之为文本文件,所有其他 阅读全文
摘要:
在IDEA中新建子模块简单步骤: 找到父模块 -》new Module ,然后: next之后,输入ArtifactId: next之后,再输入子模块名,其中,要注意,在contentRoot和Module file location部分,要加上子模块的路径: 最后,成功新建子模块: 阅读全文
摘要:
运行结果: 现在来模拟下,基于以上代码,锁是否可重入: 分析以上运行结果: 线程1调用a方法,第一次进入lock方法,去获取锁。此时,isLocked为false,于是将标志锁改为true。然后,输出a。再去执行b方法。此时,再次去调用lock方法。lock方法是使用 synchronized修饰的 阅读全文
摘要:
保证线程安全演进: synchronized volatile AtomicInteger Lock接口提供的方法: void lock():加锁 void unlock():解锁 void lockInterruptibly():在多个线程并发获取锁的时候,那么,当有些线程拿不到锁时会等待,会不停 阅读全文
摘要:
原子更新基本类型 原子更新数组 原子更新抽象类型 原子更新字段 原子更新基本类型: 运行结果: 运行结果: 对CAS的源码理解:--初步理解 在AtomicInteger中有这样一段源码: 其中,compareAndSwap就是CAS的缩写。如果prev和next不相等,则返回true。否则,返回f 阅读全文
摘要:
volatile:称之为轻量级锁,被volatile修饰的变量,在线程之间是可见的。 可见:一个线程修改了这个变量的值,在另一个线程中能够读取到这个修改后的值。 synchronized除了线程之间互斥之外,还有一个非常大的作用,就是保证可见性。以下demo即保证a值的可见性。 首先来看demo: 阅读全文
摘要:
运行结果: 控制台一直在运行,但是无任何输出。 通过命令检测是否真的发生了死锁: 点击线程,检测死锁: 阅读全文
摘要:
自旋锁,自己在不停的旋转,旋的是CPU的时间片,也就是空转CPU。当另外一个线程没有执行结束时,它一直在自旋等待。它会一直等待另外的线程执行完毕。 运行结果: 全部执行完毕Thread-0开始执行...Thread-1开始执行...Thread-1执行完毕了Thread-0执行完毕了 以上结果明显, 阅读全文