线程(ThreadLocal)
2012-01-06 16:38
218 查看
我们先来看下synchronized和ThreadLocal的区别:
他们都可以用来处理多线程并发问题的:
synchronized:同步,只有一个资源,限制线程的读取来同步,即同一时间只有某个线程去操作这个资源(以时间换空间)
ThreadLocal:是Thread的一个局部变量,注意 它不是一个线程,是用来处理多线程并发问题,它为每个线程复制了对应的一个副本,这样每个线程都可以
独立的操作了。(以空间换时间)
void set(T value) 将此线程局部变量的当前线程副本中的值设置为指定值
void remove() 移除此线程局部变量当前线程的值
protected T initialValue() 返回此线程局部变量的当前线程的“初始值”
T get() 返回此线程局部变量的当前线程副本中的值
现在来看下 ,它的具体使用:
public static class number {
ThreadLocal<Integer> mThreadLocal = new ThreadLocal<Integer>();
public Integer getNumber() {
if (mThreadLocal.get() == null)
mThreadLocal.set(0);
mThreadLocal.set(mThreadLocal.get()+1);
return mThreadLocal.get();
}
}
public static class myThread extends Thread {
private number mNumber;
public myThread(number n) {
this.mNumber = n;
}
@Override
public void run() {
for (int i = 0; i< 3; i++) {
System.out.print("currendThreadId = "+Thread.currentThread().getId()
+" number = "+this.mNumber.getNumber() + "\n");
}
}
}
public static void main(String[] args) {
number mNumber = new number();
myThread t1 = new myThread(mNumber);
myThread t2 = new myThread(mNumber);
myThread t3 = new myThread(mNumber);
t1.start();
t2.start();
t3.start();
}
每个线程都可以独立的打印出1,2,3,线程之间互不干扰。
他们都可以用来处理多线程并发问题的:
synchronized:同步,只有一个资源,限制线程的读取来同步,即同一时间只有某个线程去操作这个资源(以时间换空间)
ThreadLocal:是Thread的一个局部变量,注意 它不是一个线程,是用来处理多线程并发问题,它为每个线程复制了对应的一个副本,这样每个线程都可以
独立的操作了。(以空间换时间)
void set(T value) 将此线程局部变量的当前线程副本中的值设置为指定值
void remove() 移除此线程局部变量当前线程的值
protected T initialValue() 返回此线程局部变量的当前线程的“初始值”
T get() 返回此线程局部变量的当前线程副本中的值
现在来看下 ,它的具体使用:
public static class number {
ThreadLocal<Integer> mThreadLocal = new ThreadLocal<Integer>();
public Integer getNumber() {
if (mThreadLocal.get() == null)
mThreadLocal.set(0);
mThreadLocal.set(mThreadLocal.get()+1);
return mThreadLocal.get();
}
}
public static class myThread extends Thread {
private number mNumber;
public myThread(number n) {
this.mNumber = n;
}
@Override
public void run() {
for (int i = 0; i< 3; i++) {
System.out.print("currendThreadId = "+Thread.currentThread().getId()
+" number = "+this.mNumber.getNumber() + "\n");
}
}
}
public static void main(String[] args) {
number mNumber = new number();
myThread t1 = new myThread(mNumber);
myThread t2 = new myThread(mNumber);
myThread t3 = new myThread(mNumber);
t1.start();
t2.start();
t3.start();
}
每个线程都可以独立的打印出1,2,3,线程之间互不干扰。
相关文章推荐
- 线程--(1)ThreadLocal简单使用
- 线程本地化ThreadLocal
- 浅析Java中通过ThreadLocal实现线程绑定来传递参数
- ThreadLocal-------线程范围内的数据共享
- SimpleDateFormat 的线程安全问题与 ThreadLocal
- 【Python】[进程和线程]多进程,多线程,ThreadLocal,进程VS.线程,分布式进程
- Java线程(篇外篇):线程本地变量ThreadLocal
- 多线程编程入门(8):线程范围内的共享变量之ThreadLocal
- Java多线程之通过管道线程间通信(字节流、字符流),类ThreadLocal与类InheritableThreadLocal的使用
- ThreadLocal 实现线程内共享变量
- 多个线程ThreadLocal中存的是什么
- JAVA线程之二----ThreadLocal
- 【ThreadLocal模式】线程上的全局变量
- ThreadLocal(线程绑定)
- Java多线程——线程范围内共享变量和ThreadLocal
- 线程的私家领地:ThreadLocal
- Java并发编程--线程封闭(Ad-hoc封闭 栈封闭 ThreadLocal)
- ThreadLocal实现线程范围内共享变量
- 14.Java本地线程(ThreadLocal)
- 线程本地ThreadLocal的介绍与使用