auto commit
This commit is contained in:
parent
edeee57a99
commit
9a76762aa5
|
@ -771,19 +771,14 @@ public static String concatString(String s1, String s2, String s3) {
|
||||||
|
|
||||||
# 九、多线程开发良好的实践
|
# 九、多线程开发良好的实践
|
||||||
|
|
||||||
1. 给线程起个有意义的名字,这样可以方便找 Bug。
|
1. 给线程起个有意义的名字,这样可以方便找 Bug;
|
||||||
|
|
||||||
2. 因为锁花费的代价很高,应该尽可能减小同步范围。
|
2. 因为锁花费的代价很高,应该尽可能减小同步范围;
|
||||||
|
|
||||||
3. 多用同步类少用 wait 和 notify。首先,CountDownLatch, Semaphore, CyclicBarrier 和 Exchanger 这些同步类简化了编码操作,而用 wait 和 notify 很难实现对复杂控制流的控制。其次,这些类是由最好的企业编写和维护在后续的 JDK 中它们还会不断优化和完善,使用这些更高等级的同步工具你的程序可以不费吹灰之力获得优化。
|
3. 多用同步类少用 wait 和 notify。首先,CountDownLatch, Semaphore, CyclicBarrier 和 Exchanger 这些同步类简化了编码操作,而用 wait 和 notify 很难实现对复杂控制流的控制。其次,这些类是由最好的企业编写和维护在后续的 JDK 中它们还会不断优化和完善,使用这些更高等级的同步工具你的程序可以不费吹灰之力获得优化。
|
||||||
|
|
||||||
4. 多用并发集合少用同步集合。并发集合比同步集合的可扩展性更好,例如应该使用 ConcurrentHashMap 而不是 Hashttable。
|
4. 多用并发集合少用同步集合。并发集合比同步集合的可扩展性更好,例如应该使用 ConcurrentHashMap 而不是 Hashttable。
|
||||||
|
|
||||||
5. 多采用无锁编程减少上下文切换,如将数据的 ID 按照 hash 算法取模分段,每个线程处理特定分段的数据。
|
|
||||||
|
|
||||||
6. 多利用 CAS 算法来并发更新数据。如 Java 中的 Atomic 包。
|
|
||||||
|
|
||||||
7. 优先考虑 volatile,而不是 synchronize。这样开销更小。
|
|
||||||
# 参考资料
|
# 参考资料
|
||||||
|
|
||||||
- BruceEckel. Java 编程思想: 第 4 版 [M]. 机械工业出版社, 2007.
|
- BruceEckel. Java 编程思想: 第 4 版 [M]. 机械工业出版社, 2007.
|
||||||
|
|
|
@ -127,13 +127,6 @@
|
||||||
|
|
||||||
<div align="center"> <img src="../pics//0ee0f61b-c782-441e-bf34-665650198ae0.jpg"/> </div><br>
|
<div align="center"> <img src="../pics//0ee0f61b-c782-441e-bf34-665650198ae0.jpg"/> </div><br>
|
||||||
|
|
||||||
### 6.源地址哈希法(ip hash)
|
|
||||||
源地址哈希通过对客户端IP哈希计算得到的一个数值,用该数值对服务器数量进行取模运算,取模结果便是目标服务器的序号。
|
|
||||||
- 优点:保证同一IP的客户端都会被hash到同一台服务器上。
|
|
||||||
- 缺点:不利于集群扩展,后台服务器数量变更都会影响hash结果。可以采用一致性Hash改进。
|
|
||||||
|
|
||||||
<div align="center"> <img src="../pics//2018040301.jpg"/> </div><br>
|
|
||||||
|
|
||||||
## 实现
|
## 实现
|
||||||
|
|
||||||
### 1. HTTP 重定向
|
### 1. HTTP 重定向
|
||||||
|
|
|
@ -118,7 +118,7 @@ abc[^0-9]
|
||||||
**正则表达式**
|
**正则表达式**
|
||||||
|
|
||||||
```
|
```
|
||||||
[\w.]+@\w+.\w+
|
[\w.]+@\w+\.\w+
|
||||||
```
|
```
|
||||||
|
|
||||||
[\w.] 匹配的是字母数字或者 . ,在其后面加上 + ,表示匹配多次。在字符集合 [ ] 里,. 不是元字符;
|
[\w.] 匹配的是字母数字或者 . ,在其后面加上 + ,表示匹配多次。在字符集合 [ ] 里,. 不是元字符;
|
||||||
|
@ -130,8 +130,8 @@ abc[^0-9]
|
||||||
为了可读性,常常把转义的字符放到字符集合 [ ] 中,但是含义是相同的。
|
为了可读性,常常把转义的字符放到字符集合 [ ] 中,但是含义是相同的。
|
||||||
|
|
||||||
```
|
```
|
||||||
[\w.]+@\w+.\w+
|
[\w.]+@\w+\.\w+
|
||||||
[\w.]+@[\w]+.[\w]+
|
[\w.]+@[\w]+\.[\w]+
|
||||||
```
|
```
|
||||||
|
|
||||||
**{n}** 匹配 n 个字符,**{m, n}** 匹配 m\~n 个字符,**{m,}** 至少匹配 m 个字符;
|
**{n}** 匹配 n 个字符,**{m, n}** 匹配 m\~n 个字符,**{m,}** 至少匹配 m 个字符;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user