非线程安全

public class UnSafeThreadLocalDemo {
private int count = 0; public static void main(String[] args) {
UnSafeThreadLocalDemo unSafeThreadLocalDemo = new UnSafeThreadLocalDemo();
for (int i = 0; i < 5; i++) {
int finalI = i;
new Thread(new Runnable() {
@Override
public void run() {
unSafeThreadLocalDemo.process();
unSafeThreadLocalDemo.print(finalI);
}
}).start();
} } public void process() {
for (int i = 0; i < 10; i++) {
count += 1;
try {
TimeUnit.MILLISECONDS.sleep(new Random().nextInt(10) + 10);
} catch (InterruptedException e) {
e.printStackTrace();
}
} } public void print(int i) {
System.out.println("count(" + i + ") = " + count);
}
}

输出:

count(1) = 44
count(0) = 46
count(3) = 47
count(2) = 49
count(4) = 49

线程安全

public class SafeThreadLocalDemo {
// private int count = 0;
private ThreadLocal<Integer> count = new ThreadLocal<Integer>() {
protected Integer initialValue() {
return 0;
}
}; public void process() {
for (int i = 0; i < 10; i++) {
count.set(count.get() + 1);
try {
TimeUnit.MILLISECONDS.sleep(new Random().nextInt(10) + 10);
} catch (InterruptedException e) {
e.printStackTrace();
}
} } public void print(int i) {
System.out.println("count(" + i + ") = " + count.get());
} public static void main(String[] args) {
SafeThreadLocalDemo safeThreadLocalDemo = new SafeThreadLocalDemo();
for (int i = 0; i < 5; i++) {
int finalI = i;
new Thread(new Runnable() {
@Override
public void run() {
safeThreadLocalDemo.process();
safeThreadLocalDemo.print(finalI);
}
}).start();
} }
}

输出:

count(1) = 10
count(0) = 10
count(2) = 10
count(4) = 10
count(3) = 10

最新文章

  1. Join Attributes
  2. samba 最简单配置 共享
  3. windows操作系统日常使用
  4. 菜鸟学习SSH——目录
  5. day 0.
  6. json2.js使用参考
  7. SqLite 框架 GreenDAO
  8. 一些有用的javascript实例分析(二)
  9. JavaBean--实例:注册验证
  10. Fast R-CNN(理解)
  11. Hbase各版本环境要求
  12. C# 程序运行进度显示Lable
  13. ubuntu系统中安装eclipse
  14. MT【25】切线不等式原理及例题
  15. java web 使用maven打包绕过单元测试
  16. 即将上线的Kafka 集群(用CM部署的)无法使用“--bootstrap-server”进行消费,怎么破?
  17. java 把InputStream流写入到文件中
  18. bzoj 1826
  19. git 查看父分支
  20. Spring_总结_02_依赖注入

热门文章

  1. 环境变量、cp、mv、cat 等命令
  2. ES最佳实践之分片使用优化
  3. 逍遥大佬分享mysql知识
  4. 对中文进行MD5加密的注意事项(Java版,编码问题)
  5. 本地连接服务器的mongodb
  6. Singer 学习九 运行&amp;&amp;开发taps、targets (四 开发target)
  7. Hasura GraphQL schema 生成是如何工作的
  8. Web读取指定的config文件的内容
  9. 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
  10. 是“帐”还是“账” --- 由 FastAdmin 用户中心引出的讨论