File tree Expand file tree Collapse file tree 3 files changed +57
-1
lines changed Expand file tree Collapse file tree 3 files changed +57
-1
lines changed Original file line number Diff line number Diff line change 1
- # ConcurrentHashmap
1
+ # ConcurrentHashMap
2
2
3
3
> HashMap` 的线程安全版本,可以用来替换 ` HashTable` 。在hash碰撞过多的情况下会将链表转化成红黑树。1.8版本的 ` ConcurrentHashMap` 的实现与1.7版本有很大的差别,放弃了*段锁*的概念,借鉴了 ` HashMap`的数据结构:数组+链表+红黑树。
4
4
Original file line number Diff line number Diff line change
1
+ # Java 中的四种引用
2
+
3
+ - 强引用
4
+ - 软引用
5
+ - 弱引用
6
+ - 虚引用
7
+
8
+
9
+
10
+ ## 强引用
11
+
12
+ 当**内存空间不足**时,`Java`虚拟机宁愿抛出`OutOfMemoryError`错误,使程序**异常终止**,也不会靠随意**回收**具有**强引用**的**对象**来解决内存不足的问题。 如果强引用对象**不使用时**,需要弱化从而使`GC`能够回收。
13
+
14
+ ## 软引用
15
+
16
+ 如果一个对象只具有**软引用**,则**内存空间充足**时,**垃圾回收器**就**不会**回收它;如果**内存空间不足**了,就会**回收**这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。
17
+
18
+ ## 弱引用
19
+
20
+ **弱引用**与**软引用**的区别在于:只具有**弱引用**的对象拥有**更短暂**的**生命周期**。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有**弱引用**的对象,不管当前**内存空间足够与否**,都会**回收**它的内存。不过,由于垃圾回收器是一个**优先级很低的线程**,因此**不一定**会**很快**发现那些只具有**弱引用**的对象。
21
+
22
+ ## 虚引用
23
+
24
+ **虚引用**顾名思义,就是**形同虚设**。与其他几种引用都不同,**虚引用**并**不会**决定对象的**生命周期**。如果一个对象**仅持有虚引用**,那么它就和**没有任何引用**一样,在任何时候都可能被垃圾回收器回收。(PhantomReference.get() 永远返回 null)
25
+
26
+ ### 应用场景
27
+
28
+ **虚引用**主要用来**跟踪对象被垃圾回收器回收的活动**。 **虚引用**与**软引用**和**弱引用**的一个区别在于:
29
+
30
+ > 虚引用必须和引用队列(ReferenceQueue)联合使用。**当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中**。
Original file line number Diff line number Diff line change
1
+ # AsyncTask 原理
2
+
3
+ ## Callable
4
+
5
+ Callable与Runnable的功能大致相似,Callable中有一个call()函数,** 但是call()函数有返回值** ,而Runnable的run()函数不能将结果返回给客户程序。
6
+
7
+ ## Future
8
+
9
+ Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果、设置结果操作。
10
+
11
+ ## FutureTask
12
+
13
+ FutureTask则是一个RunnableFuture<V >,而RunnableFuture实现了Runnbale又实现了Futrue<V >这两个接口。
14
+
15
+ 因此FutureTask既是Future、Runnable,又是包装了Callable( 如果是Runnable最终也会被转换为Callable ), 它是这两者的合体。
16
+
17
+ ## AsyncTask
18
+
19
+
20
+
21
+
22
+
23
+ ------
24
+
25
+ [ ] : https://blog.csdn.net/bboyfeiyu/article/details/24851847 "Java中的Runnable、Callable、Future、FutureTask的区别与示例"
26
+
You can’t perform that action at this time.
0 commit comments