Skip to content

Commit 7542e78

Browse files
committed
cs remark and visibility example change
1 parent 9966519 commit 7542e78

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/main/java/com/example/concurrency/contentSwitch/ContentSwitchTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
/**
44
* @author zed
55
* 上下文切换测试类
6-
* 1、结论 循环数量在百万级别时 并发处理速度才会领先,说明上下文切换的存在
7-
* 2、使用vmstat 查看测量上下文切换次数得出 1000次/s
6+
* 1、结论 循环数量在百万级别时 并发处理速度才会领先,说明上下文切换的存在以及线程创建的成本
7+
* 2、使用Lmbench3 测量上下文切换时长,使用vmstat 查看测量上下文切换次数上下文速度 1000次/s
88
* 3、减少上下文切换
9-
* 1)无锁并发编程-》数据ID按照Hash算法取模分段 不同线程处理不同数据
9+
* 1)无锁并发编程-》多线程锁竞争会引起切换,可以通过数据ID按照Hash算法取模分段 不同线程处理不同数据避免使用锁
1010
* 2)CAS算法
1111
* 3)协程:在单线程里实现多任务调度,并在单线程里维持多个任务的切换
12+
* 4)使用最少线程
1213
*
1314
*/
1415
public class ContentSwitchTest {

src/main/java/com/example/concurrency/visibility/Visibility.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
package com.example.concurrency.visibility;
22

3+
import com.example.concurrency.threadPool.ThreadPoolBuilder;
4+
import com.example.concurrency.util.ThreadUtil;
5+
import lombok.extern.slf4j.Slf4j;
6+
7+
import java.util.concurrent.ThreadPoolExecutor;
8+
39
/**
410
* 描述:
511
* visibility 可见性问题
612
*
713
* @author zed
814
* @since 2019-06-13 9:05 AM
915
*/
16+
@Slf4j
1017
public class Visibility {
1118
private static long count = 0;
1219
private void add10K() {
@@ -16,8 +23,25 @@ private void add10K() {
1623
}
1724
}
1825

26+
/**
27+
* 通过boolean 变量更加直观
28+
*/
29+
private static boolean flag = true;
1930
public static void main(String[] args) {
20-
System.out.println(calc());
31+
// System.out.println(calc());
32+
33+
log.info("我开始了");
34+
ThreadPoolExecutor threadPoolExecutor = ThreadPoolBuilder.fixedPool().build();
35+
//线程开始
36+
threadPoolExecutor.execute(() -> {
37+
while(flag){
38+
39+
}
40+
log.info("我退出了");
41+
42+
});
43+
ThreadUtil.sleep(100);
44+
flag = false;
2145
}
2246
private static long calc(){
2347
final Visibility visibility = new Visibility();
@@ -39,6 +63,7 @@ private static long calc(){
3963
Thread.currentThread().interrupt();
4064
}
4165
return count;
66+
4267
}
4368

4469
}

0 commit comments

Comments
 (0)