Synchronized和ThreadLocal的区别
来源:互联网 发布:中小型企业网络建设 编辑:程序博客网 时间:2024/05/21 08:21
关于理论知识,以下这两个文章讲的很好:
Spring单例与线程安全小结
ThreadLocal的原理和在框架中的应用
不多说,上代码,自己运行一下就知道区别了
package com.spri.test;public class SequenceNumber {public Object obj = new Object();// ①通过匿名内部类覆盖ThreadLocal的initialValue()方法,指定初始值private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>() {public Integer initialValue() {return 0;}};public int getCount(){synchronized(obj){return count++;}}public int getAno(){ano++;return ano;}public int ano = 0;public int count =0;//②获取下一个序列值public int getNextNum() {seqNum.set(seqNum.get() + 1);return seqNum.get();}public static void main(String[] args) {SequenceNumber sn = new SequenceNumber();//③3个线程共享sn,各自产生序列号TestClient t1 = new TestClient(sn);TestClient t2 = new TestClient(sn);TestClient t3 = new TestClient(sn);t1.start();t2.start();t3.start();}private static class TestClient extends Thread {private int num = 0;private SequenceNumber sn;public TestClient(SequenceNumber sn) {this.sn = sn;}public void run() {for (int i = 0; i < 3; i++) {// ④每个线程打出3个序列值System.out.println("thread[" + Thread.currentThread().getName() + "] sn[" + sn.getNextNum() + "]");System.out.println(sn.getCount());System.out.println(sn.getAno());}}}}
thread[Thread-0] sn[1]
thread[Thread-2] sn[1]
1
1
thread[Thread-1] sn[1]
2
2
thread[Thread-2] sn[2]
3
3
0
4
thread[Thread-2] sn[3]
4
5
thread[Thread-1] sn[2]
5
6
thread[Thread-0] sn[2]
6
7
thread[Thread-1] sn[3]
7
8
thread[Thread-0] sn[3]
8
9
readLocal不是为了解决并发同步用的,是为了隔离变量用的。同步是为了让多个线程共同操作一个对象而不乱掉,而ThreadLocal直接就把某个对象在各自线程中重新实例化一个了,各个线程都有自己的该对象,所以就不用管同步不同步了
0 0
- Synchronized和ThreadLocal的区别
- ThreadLocal与synchronized的区别
- Threadlocal和synchronized的比较
- ThreadLocal用法及与Synchronized的区别
- Synchronized和ThreadLocal使用的比较
- 多线程共享数据 synchronized和使用ThreadLocal区别
- ThreadLocal和InheritableThreadLocal的区别
- synchronized方法和synchronized块的区别
- synchronized块和synchronized方法的区别
- Synchronized 和 static synchronized 的区别
- Java static synchronized 和 synchronized的区别
- synchronized和static synchronized的区别
- 简明扼要,再谈ThreadLocal和synchronized
- 简明扼要,再谈ThreadLocal和synchronized
- 简明扼要,再谈ThreadLocal和synchronized
- 锁的粒度:ThreadLocal、volatile、Atomic和Synchronized
- ThreadLocal与Synchronized的用法
- ThreadLocal与Synchronized的用法
- 【集群】故障切换 [待修改]
- 计算机网络基础知识
- mysql创建函数(从别的地方复制过来)
- 二叉树递归/非递归遍历
- 设置环境变量
- Synchronized和ThreadLocal的区别
- Windows消息队列,UI线程,窗口以及消息处理方式总结
- 二叉索引树(树状数组)
- js判断手机端是否弹出软键盘
- iOS CoreAnimation专题——技巧篇(二)CAShapeLayer with Bezier Path - Layer世界的神奇画笔
- ListView点击事件失效(item里面有button按钮控件)解决方法
- 5G是一场革命
- Android 滑动改变top颜色
- 高效显示Bitmap-----From "Getting Started"