您的位置:首页 > 其它

线程(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,线程之间互不干扰。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: