Skip to content

Commit c0c9344

Browse files
author
wangdi
committed
update
1 parent 9816f3a commit c0c9344

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

docs/b-3Java多线程.md

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -904,6 +904,31 @@ public interface Callable<V> {
904904
- `AtomicLongFieldUpdater`:原子更新长整形字段的更新器
905905
- `AtomicReferenceFieldUpdater`:原子更新引用类型字段的更新器
906906

907+
注意:在使用的时候bean的字段必须要不能是private 而且是volatile字段
908+
909+
```java
910+
public class AtomUser {
911+
// 不能是private, 必须要volatile
912+
public volatile String name;
913+
914+
public AtomUser() {
915+
}
916+
917+
@Test
918+
void AtomicReferenceField() {
919+
// cannot access a member of class mytest.jdk.thread.atoms.AtomUser with modifiers "private"
920+
// Must be volatile type
921+
AtomicReferenceFieldUpdater<AtomUser, String> fieldUpdater
922+
= AtomicReferenceFieldUpdater.newUpdater(AtomUser.class, String.class, "name");
923+
String name = "old name";
924+
AtomUser atomUser = new AtomUser(name);
925+
boolean b1 = fieldUpdater.compareAndSet(atomUser, name, "新的名字");
926+
boolean b2 = fieldUpdater.compareAndSet(atomUser, name, "新的名字2");
927+
}
928+
```
929+
930+
931+
907932
### 2.3.24. AQS 了解么?
908933

909934
AQS 的全称为(`AbstractQueuedSynchronizer`),这个类在`java.util.concurrent.locks`包下面。
@@ -933,7 +958,8 @@ AQS 原理这部分参考了部分博客,在 5.2 节末尾放了链接。
933958
AQS 使用一个 int 成员变量来表示同步状态,通过内置的 FIFO 队列来完成获取资源线程的排队工作。AQS 使用 CAS 对该同步状态进行原子操作实现对其值的修改。
934959

935960
```java
936-
private volatile int state;//共享变量,使用volatile修饰保证线程可见性
961+
//共享变量,使用volatile修饰保证线程可见性
962+
private volatile int state;
937963
```
938964

939965
状态信息通过 protected 类型的 getState,setState,compareAndSetState 进行操作

docs/e-4netty.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,9 +536,13 @@ TCP 实际上自带的就有长连接选项,本身是也有心跳包机制,
536536
Netty 中的零拷贝体现在以下几个方面
537537

538538
1. 使用 Netty 提供的 `CompositeByteBuf` 类, 可以将多个`ByteBuf` 合并为一个逻辑上的 `ByteBuf`, 避免了各个 `ByteBuf` 之间的拷贝。
539+
539540
2. `ByteBuf` 支持 slice 操作, 因此可以将 ByteBuf 分解为多个共享同一个存储区域的 `ByteBuf`, 避免了内存的拷贝。
541+
540542
3. 通过 `FileRegion` 包装的`FileChannel.tranferTo` 实现文件传输, 可以直接将文件缓冲区的数据发送到目标 `Channel`, 避免了传统通过循环 write 方式导致的内存拷贝问题.
541543

544+
545+
542546
### 参考
543547

544548
- netty 学习系列二:NIO Reactor 模型 & Netty 线程模型:https://www.jianshu.com/p/38b56531565d

0 commit comments

Comments
 (0)