文档章节

使用 ThreadLocal 来解决多线程之间数据共享

gavin
 gavin
发布于 2015/07/31 15:00
字数 184
阅读 122
收藏 9

private static ThreadLocal<String> uuID = new ThreadLocal<String>(){

protected synchronized String initialValue(){

return null;

}

};

public static String getNextUUID(){

try {

if(uuID.get() != null)

return uuID.get();

uuID.set(UUIDUtil.replaceString(UUIDUtil.getUUID(), "-", '-'));

return uuID.get();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

//测试线程

package com.ushi.montor.test;

 

import com.ushi.montor.util.UUIDUtil;

 

public class TestClient extends Thread {

 

public void run(){

for(int i = 0 ; i < 3; i++){

System.out.println("thread[" + Thread.currentThread().getName()+"] sn[" + UUIDUtil.getNextUUID() + "]");

}

}

}

//测试类

package com.ushi.montor.test;

 

public class TestThreadLocal {

public static void main(String[] args) {

        //  3个线程共享sn,各自产生序列号

        TestClient t1 = new TestClient();

        TestClient t2 = new TestClient();

        TestClient t3 = new TestClient();

        t1.start();

        t2.start();

        t3.start();

}

}

 

//执行结果

 

thread[Thread-1] sn[6c9324d1b7774e2891179c57294b5e52]

thread[Thread-1] sn[6c9324d1b7774e2891179c57294b5e52]

thread[Thread-1] sn[6c9324d1b7774e2891179c57294b5e52]

thread[Thread-0] sn[402526757d824d0988572b706dea7334]

thread[Thread-0] sn[402526757d824d0988572b706dea7334]

thread[Thread-0] sn[402526757d824d0988572b706dea7334]

thread[Thread-2] sn[1b10c4b83a43401da369c823cd1f7c2d]

thread[Thread-2] sn[1b10c4b83a43401da369c823cd1f7c2d]

thread[Thread-2] sn[1b10c4b83a43401da369c823cd1f7c2d]


© 著作权归作者所有

共有 人打赏支持
gavin
粉丝 11
博文 31
码字总数 19330
作品 0
浦东
私信 提问
synchronized与ThreadLocal

synchronized是实现java的同步机制。同步机制是为了实现同步多线程对相同资源的并发访问控制。保证多线程之间的通信。 同步的主要目的是保证多线程间的数据共享。同步会带来巨大的性能开销,...

bigYuan
2013/07/18
0
2
Java多线程下 ThreadLocal 的应用实例

ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程” 。其实,ThreadLocal并不是一个 Thread,而是 Thread 的局部变量,也许把它命名为 ThreadLocalVariable更容易让人理解一些。...

空云万里晴
2014/01/06
0
0
再有人问你Java内存模型是什么,就把这篇文章发给他!

前几天,发了一篇文章,介绍了一下JVM内存结构、Java内存模型以及Java对象模型之间的区别。有很多小伙伴反馈希望可以深入的讲解下每个知识点。Java内存模型,是这三个知识点当中最晦涩难懂的...

技术小能手
2018/09/30
0
0
通通透透理解ThreadLocal

通通透透理解ThreadLocal 概述 我们知道Spring通过各种DAO模板类降低了开发者使用各种数据持久技术的难度。这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲...

阿秀a
2010/06/15
0
0
再有人问你Java内存模型是什么,就把这篇文章发给他。

前几天,发了一篇文章,介绍了一下JVM内存结构、Java内存模型以及Java对象模型之间的区别。有很多小伙伴反馈希望可以深入的讲解下每个知识点。Java内存模型,是这三个知识点当中最晦涩难懂的...

Java架构
2018/07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 做一只舔狗,开心时就去舔她,不开心时就舔自己

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @温家成 :分享连诗雅的单曲《水星逆行》 《水星逆行》- 连诗雅 手机党少年们想听歌,请使劲儿戳(这里) @罗马的王 :在家嫌猫吵,去书城看书...

小小编辑
34分钟前
20
3
Ruby中的继承、原型、面向对象、访问域

先有类还是先有对象 从鸡蛋悖论解决可以悟到一个道理,不要从常识上假设非此即彼和绝对静止。 Ruby中的类和对象正是这么个东西 我们创建一个类,那它就是Class这个对象的实例,而Class,于是...

可数局部基
今天
4
0
什么时候使用字节流、什么时候使用字符流,二者的区别

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。 InputStream 和OutputStream,...

watermelon11
今天
6
0
Alpakka Kafka,反应式Kafka客户端

Alpakka Kafka 是一个要用于 Java 和 Scala 语言的开源的流感知和反应式集成数据线项目。它建立在 Akka Stream之上,提供了 DSL 来支持反应式和流式编程,内置回压功能。Akka Streams 是 Re...

羊八井
今天
5
0
PHP7源码编译安装详解

$ yum groupinstall "development tools"$ yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype \freetype-devel libpng libpng-devel libxml2 ......

问题终结者
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部