Java基础加强 线程范围内数据共享设计模式
2013-12-08 22:05
567 查看
线程范围内数据共享设计模式
获得某个类的实例,且该实例对象是与本线程相关的,则使用类似单利设计模式的ThreadLocal方法。
例如如下代码:
package Cn.itcast;
import java.util.Random;
public class ThreadLocalTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
ThreadLocalTest tlt=new ThreadLocalTest();
final A a=tlt.new A();
final B b=tlt.new B();
for(int i=0;i<2;i++){
new Thread(new Runnable(){
public void run(){
int age=new Random().nextInt();
System.out.println("线程:"+Thread.currentThread().getName()+"开始放入数据"+age);
ThreadInstance instanc=ThreadInstance.getThreadInstance();
instanc.setName(""+age);
instanc.setAge(age);
a.get();
b.get();
}
}).start();
}
}
class A{
public void get(){
ThreadInstance instanc=ThreadInstance.getThreadInstance();
System.out.println("线程"+Thread.currentThread().getName()+"在A中获得姓名为:"+instanc.getName()+"年龄为"+instanc.getAge());
}
}
class B{
public void get(){
ThreadInstance instanc=ThreadInstance.getThreadInstance();
System.out.println("线程"+Thread.currentThread().getName()+"在B中获得姓名为:"+instanc.getName()+"年龄为"+instanc.getAge());
}
}
}
class ThreadInstance{
private String name;
private int age;
private ThreadInstance(){}
static ThreadLocal<ThreadInstance> th=new ThreadLocal<ThreadInstance>();
public static ThreadInstance getThreadInstance(){
ThreadInstance instance=th.get();
if(instance==null){
instance=new ThreadInstance();
th.set(instance);
}
return instance;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
获得某个类的实例,且该实例对象是与本线程相关的,则使用类似单利设计模式的ThreadLocal方法。
例如如下代码:
package Cn.itcast;
import java.util.Random;
public class ThreadLocalTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
ThreadLocalTest tlt=new ThreadLocalTest();
final A a=tlt.new A();
final B b=tlt.new B();
for(int i=0;i<2;i++){
new Thread(new Runnable(){
public void run(){
int age=new Random().nextInt();
System.out.println("线程:"+Thread.currentThread().getName()+"开始放入数据"+age);
ThreadInstance instanc=ThreadInstance.getThreadInstance();
instanc.setName(""+age);
instanc.setAge(age);
a.get();
b.get();
}
}).start();
}
}
class A{
public void get(){
ThreadInstance instanc=ThreadInstance.getThreadInstance();
System.out.println("线程"+Thread.currentThread().getName()+"在A中获得姓名为:"+instanc.getName()+"年龄为"+instanc.getAge());
}
}
class B{
public void get(){
ThreadInstance instanc=ThreadInstance.getThreadInstance();
System.out.println("线程"+Thread.currentThread().getName()+"在B中获得姓名为:"+instanc.getName()+"年龄为"+instanc.getAge());
}
}
}
class ThreadInstance{
private String name;
private int age;
private ThreadInstance(){}
static ThreadLocal<ThreadInstance> th=new ThreadLocal<ThreadInstance>();
public static ThreadInstance getThreadInstance(){
ThreadInstance instance=th.get();
if(instance==null){
instance=new ThreadInstance();
th.set(instance);
}
return instance;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
相关文章推荐
- 黑马程序员—Java基础加强 (基本数据的自动拆装箱及享元设计模式)
- Java基础——线程范围内的共享数据概念和作用
- Java基础——ThreadLocal实现线程范围内的数据共享
- 黑马程序员--读写字节数组,随机读写流,集合IO的思维导图,多线程部分,单例设计模式,线程和进程的概念,Java中的线程的创建方式,线程的随机性,线程的状态图,多线程操作共享数据的安全性,死锁
- Java基础:多线程之线程范围内的数据共享ThreadLocal
- 【java并发】线程范围内共享数据
- Java线程与并发库高级应用-线程范围内共享数据ThreadLocal类
- Java中如何实现单个线程范围内的数据共享
- java线程范围内的数据共享
- Java死锁和线程范围内共享数据
- java 多线程 day05 线程范围内的数据共享
- 黑马程序员---java中如何实现线程范围内共享数据
- java基础第九讲——反射、工厂设计模式、注解、线程、网络与线程的结合
- Java并发05---线程范围内的共享数据
- Java基础——多个线程共享数据
- Java线程范围内的共享数据(2)
- java基础--线程04--多个线程访问共享对象和数据的方式
- java多线程:5、线程范围内的数据共享_ThreadLocal
- java基础加强(jdk新特性 javaa设计模式 反射)
- java基础--线程03--实现线程范围内的共享变量