多线程学习笔记四
来源:互联网 发布:拳皇98um出招优化补丁 编辑:程序博客网 时间:2024/05/04 19:08
/**
* 线程范围内的数据共享
*
* 应用场景:减少库存量,增加流水账和修改总账 ,这几个操作要在同一个事务中, 事务需要放在线程范围内
*
*
* @time 上午10:10:13
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class ThreadLocalTest {
/**
* @param args
*/
public static void main(String[] args) {
final A a = new A();
final B b = new B();
for (int i = 0; i < 5; i++) {
new Thread() {
@Override
public void run() {
// MyThreadLocalData.set(new Random().nextInt(10000));
// System.out.println(Thread.currentThread() + ":has put " +
// MyThreadLocalData.get());
// a.say();
// b.sayHello();
MyThreadLocalData.getMyThreadLocalInstance().setNum(new Random().nextInt(10000));
System.out.println(Thread.currentThread() + ":has put " + MyThreadLocalData.getMyThreadLocalInstance().getNum());
a.say();
b.sayHello();
MyThreadLocalData.clear();
}
}.start();
}
}
}
/**
* 存放全局变量
*
* @time 上午10:27:49
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
class MyThreadLocalData {
/*
* private static ThreadLocal tl = new ThreadLocal();
*
* public static Object get() { return tl.get(); }
*
* public static void set(Object value) { tl.set(value); }
*/
private static ThreadLocal instanceContainer = new ThreadLocal();
/**
* 构造器
*/
private MyThreadLocalData() {
}
/**
* 单例
*
* @return
*/
public static MyThreadLocalData getMyThreadLocalInstance() {
MyThreadLocalData instance = (MyThreadLocalData) instanceContainer.get();
if (null == instance) {
instance = new MyThreadLocalData();
instanceContainer.set(instance);
}
return instance;
}
/**
* 清除
*/
public static void clear() {
instanceContainer.remove();
}
private Integer x;
public void setNum(Integer x) {
this.x = x;
}
public Integer getNum() {
return x;
}
}
class A {
public void say() {
// System.out.println(Thread.currentThread() + ":A has geted " +
// MyThreadLocalData.get());
System.out.println(Thread.currentThread() + ":A has geted " + MyThreadLocalData.getMyThreadLocalInstance().getNum());
}
}
class B {
public void sayHello() {
// System.out.println(Thread.currentThread() + ":B has geted " +
// MyThreadLocalData.get());
System.out.println(Thread.currentThread() + ":B has geted " + MyThreadLocalData.getMyThreadLocalInstance().getNum());
}
}
* 线程范围内的数据共享
*
* 应用场景:减少库存量,增加流水账和修改总账 ,这几个操作要在同一个事务中, 事务需要放在线程范围内
*
*
* @time 上午10:10:13
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class ThreadLocalTest {
/**
* @param args
*/
public static void main(String[] args) {
final A a = new A();
final B b = new B();
for (int i = 0; i < 5; i++) {
new Thread() {
@Override
public void run() {
// MyThreadLocalData.set(new Random().nextInt(10000));
// System.out.println(Thread.currentThread() + ":has put " +
// MyThreadLocalData.get());
// a.say();
// b.sayHello();
MyThreadLocalData.getMyThreadLocalInstance().setNum(new Random().nextInt(10000));
System.out.println(Thread.currentThread() + ":has put " + MyThreadLocalData.getMyThreadLocalInstance().getNum());
a.say();
b.sayHello();
MyThreadLocalData.clear();
}
}.start();
}
}
}
/**
* 存放全局变量
*
* @time 上午10:27:49
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
class MyThreadLocalData {
/*
* private static ThreadLocal tl = new ThreadLocal();
*
* public static Object get() { return tl.get(); }
*
* public static void set(Object value) { tl.set(value); }
*/
private static ThreadLocal instanceContainer = new ThreadLocal();
/**
* 构造器
*/
private MyThreadLocalData() {
}
/**
* 单例
*
* @return
*/
public static MyThreadLocalData getMyThreadLocalInstance() {
MyThreadLocalData instance = (MyThreadLocalData) instanceContainer.get();
if (null == instance) {
instance = new MyThreadLocalData();
instanceContainer.set(instance);
}
return instance;
}
/**
* 清除
*/
public static void clear() {
instanceContainer.remove();
}
private Integer x;
public void setNum(Integer x) {
this.x = x;
}
public Integer getNum() {
return x;
}
}
class A {
public void say() {
// System.out.println(Thread.currentThread() + ":A has geted " +
// MyThreadLocalData.get());
System.out.println(Thread.currentThread() + ":A has geted " + MyThreadLocalData.getMyThreadLocalInstance().getNum());
}
}
class B {
public void sayHello() {
// System.out.println(Thread.currentThread() + ":B has geted " +
// MyThreadLocalData.get());
System.out.println(Thread.currentThread() + ":B has geted " + MyThreadLocalData.getMyThreadLocalInstance().getNum());
}
}
- 多线程学习笔记 四
- 多线程学习笔记四
- 多线程学习笔记(四)
- 多线程编程学习笔记(四)
- 《win32多线程程序设计》学习笔记四
- java多线程学习笔记(四)
- 学习笔记二,vc++创建多线程服务器(四)
- linux网络编程学习笔记之四 -----多线程并发服务端
- (黑马程序员)学习笔记,多线程(四)
- 同步和原子性---多线程学习笔记(四)
- Java 多线程学习笔记(四)yield 介绍
- c# 多线程学习笔记(四)生产者消费者问题
- 多线程学习之四
- 多线程学习(四)
- 多线程学习(四)
- 多线程编程笔记(四)
- 《posix多线程编程》笔记(四)
- Java多线程学习笔记
- 标准C++中的string类的用法总结
- Java正则表达式入门
- 二分法
- 注册表、批处理 技巧
- 大型网站架构要思考的几个问题
- 多线程学习笔记四
- Z shell
- leeboy的linux学习八awk脚本
- Quick and easy Watir test suites with Test::Unit
- ipad取代课本当教材国内不太实际
- SQL1652N File I/O error occurred
- starling教程-触摸事件(Touch Events)
- X11下几种显示图像的方式
- MemcacheDB, Tokyo Tyrant, Redis性能测试比较