Skip to content

Commit a438a4d

Browse files
author
Tan Minghui
committed
Update articles
1 parent 6ce9829 commit a438a4d

File tree

3 files changed

+57
-1
lines changed

3 files changed

+57
-1
lines changed

Java/ConcurrentHashmap.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# ConcurrentHashmap
1+
# ConcurrentHashMap
22

33
> HashMap`的线程安全版本,可以用来替换`HashTable`。在hash碰撞过多的情况下会将链表转化成红黑树。1.8版本的`ConcurrentHashMap`的实现与1.7版本有很大的差别,放弃了*段锁*的概念,借鉴了`HashMap`的数据结构:数组+链表+红黑树。
44

Java/Java 中的四种引用

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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)联合使用。**当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中**。

android/AsyncTask 原理.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+

0 commit comments

Comments
 (0)