@@ -132,6 +132,14 @@ G-->H[double]
132132 float f2 = (float) d2;//向下转型需要强转
133133 ```
134134
135+ ```java
136+ int i1 = 1245;
137+ long l1 = i1;
138+
139+ long l2 = 1234;
140+ int i2 = (int) l2;
141+ ```
142+
135143* 隐式类型转换:
136144
137145 字面量 1 是 int 类型,它比 short 类型精度要高,因此不能隐式地将 int 类型向下转型为 short 类型
@@ -144,14 +152,6 @@ G-->H[double]
144152 s1 = (short) (s1 + 1);
145153 ```
146154
147- ```java
148- int i1 = 1245;
149- long l1 = i1;
150-
151- long l2 = 1234;
152- int i2 = (int) l2;
153- ```
154-
155155
156156
157157
@@ -4956,7 +4956,7 @@ public static void main(String[] args){
49564956
49574957#### HashMap
49584958
4959- ##### 集合概述
4959+ ##### 基本介绍
49604960
49614961HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,主要用来存放键值对
49624962
@@ -4968,6 +4968,13 @@ HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,
49684968* HashMap中的映射不是有序的,即存取是无序的
49694969* **key要存储的是自定义对象,需要重写hashCode和equals方法,防止出现地址不同内容相同的key**
49704970
4971+ JDK7对比JDK8:
4972+
4973+ * 7 = 数组 + 链表,8 = 数组 + 链表 + 红黑树
4974+ * 7中是头插法,多线程容易造成环,8中是尾插法
4975+ * 7的扩容是全部数据重新定位,8中是位置不变或者当前位置 + 旧size大小来实现
4976+ * 7是先判断是否要扩容再插入,8中是先插入再看是否要扩容
4977+
49714978底层数据结构:
49724979
49734980* 哈希表(Hash table,也叫散列表),根据关键码值(Key value)而直接访问的数据结构。通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫做散列表
@@ -12604,7 +12611,7 @@ Java语言提供了对象终止(finalization)机制来允许开发人员提
1260412611
1260512612### 垃圾回收器
1260612613
12607- #### GC概述
12614+ #### 概述
1260812615
1260912616垃圾收集器分类:
1261012617
@@ -12784,7 +12791,8 @@ CMS收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿
1278412791
1278512792* `-XX:CMSInitiatingoccupanyFraction`:设置堆内存使用率的阈值,一旦达到该阈值,便开始进行回收
1278612793
12787- * JDK5及以前版本的默认值为68,即当老年代的空间使用率达到68%时,会执行一次CMS回收,JDK6及以上版本默认值为92%
12794+ * JDK5及以前版本的默认值为68,即当老年代的空间使用率达到68%时,会执行一次CMS回收
12795+ * JDK6及以上版本默认值为92%
1278812796
1278912797* `-XX:+UseCMSCompactAtFullCollection`:用于指定在执行完Full GC后对内存空间进行压缩整理,以此避免内存碎片的产生,由于内存压缩整理过程无法并发执行,所带来的问题就是停顿时间变得更长
1279012798
@@ -12846,7 +12854,7 @@ G1对比其他处理器的优点:
1284612854
1284712855G1垃圾收集器的缺点:
1284812856
12849- * 相较于CMS,G1还不具备全方位、压倒性优势。比如在用户程序运行过程中,G1无论是为了垃圾收集产生的内存占用(Footprint)还是程序运行时的额外执行负载(overload)都要比CMS要高
12857+ * 相较于CMS,G1还不具备全方位、压倒性优势。比如在用户程序运行过程中,G1无论是为了垃圾收集产生的内存占用还是程序运行时的额外执行负载都要比CMS要高
1285012858* 从经验上来说,在小内存应用上CMS的表现大概率会优于G1,而G1在大内存应用上则发挥其优势。平衡点在6-8GB之间
1285112859
1285212860应用场景:
@@ -19834,19 +19842,19 @@ AQS 核心思想:
1983419842
1983519843state设计:
1983619844
19837- * state **使用 volatile 配合 cas** 保证其修改时的原子性
1983819845* state 使用了 32bit int 来维护同步状态
19839- * state 表示允许的进入的线程数
19846+ * state **使用 volatile 修饰配合 cas** 保证其修改时的原子性
19847+ * state 表示已经进入的线程数或者许可进入的线程数
1984019848* state API:
1984119849 `protected final int getState()`:获取 state 状态
1984219850 `protected final void setState(int newState)`:设置 state 状态
1984319851 `protected final boolean compareAndSetState(int expect,int update)`:**CAS**设置 state
1984419852
1984519853waitstate设计:
1984619854
19847- * 使用**volatile 配合 cas**保证其修改时的原子性
19855+ * 使用**volatile 修饰配合 cas**保证其修改时的原子性
1984819856
19849- * Node 节点的几种状态 :
19857+ * 表示Node节点的状态,有以下几种状态 :
1985019858
1985119859 ```java
1985219860 //由于超时或中断,此节点被取消,不会再改变状态
@@ -21817,7 +21825,7 @@ class ThreadA extends Thread{
2181721825 public void run() {
2181821826 try{
2181921827 sout("线程A,做好了礼物A,等待线程B送来的礼物B");
21820- //如果等待了5s还没有交换它就去死 (抛出异常)!
21828+ //如果等待了5s还没有交换就死亡 (抛出异常)!
2182121829 String s = exchanger.exchange("礼物A",5,TimeUnit.SECONDS);
2182221830 sout("线程A收到线程B的礼物:" + s);
2182321831 } catch (Exception e) {
@@ -21833,7 +21841,7 @@ class ThreadB extends Thread{
2183321841 @Override
2183421842 public void run() {
2183521843 try {
21836- System.out.println ("线程B,做好了礼物B,等待线程A送来的礼物A.....");
21844+ sout ("线程B,做好了礼物B,等待线程A送来的礼物A.....");
2183721845 // 开始交换礼物。参数是送给其他线程的礼物!
2183821846 sout("线程B收到线程A的礼物:" + exchanger.exchange("礼物B"));
2183921847 } catch (Exception e) {
@@ -22580,13 +22588,16 @@ ConcurrentHashMap 对锁粒度进行了优化,**分段锁技术**,将整张
2258022588
2258122589
2258222590
22583- ### LinkedQueue
22591+ ### LinkedQueue
22592+
22593+ (待更新)
2258422594
2258522595ConcurrentLinkedQueue 的设计与 LinkedBlockingQueue 相似:
2258622596
2258722597* 两把锁,同一时刻,可以允许两个线程同时(一个生产者与一个消费者)执行
2258822598* dummy 节点的引入让两把锁将来锁住的是不同对象,避免竞争
22589- * 只是这锁使用了 cas 来实现
22599+ * 锁使用了 cas 来实现
22600+ * 此队列不允许使用 null 元素
2259022601
2259122602
2259222603
0 commit comments