|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
ThreadLocal与线程成员变量另有区分,ThreadLocal该类供应了线程部分变量。这个部分变量与一样平常的成员变量纷歧样,ThreadLocal的变量在被多个线程利用时分,每一个线程只能拿到该变量的一个正本,这是JavaAPI中的形貌,经由过程浏览API源码,发明并不是正本,正本甚么观点?克隆品?大概是其余模样,太含混。
正确的说,应当是ThreadLocal范例的变量外部的注册表(Map<Thread,T>)产生了变更,但ThreadLocal范例的变量自己切实其实是一个,这才是实质!
上面就做个例子:
1、尺度例子
界说了MyThreadLocal类,创立它的一个对象tlt,分离给四个线程利用,了局四个线程tlt变量并没有呈现共用征象,二是各用各的,这申明,四个线程利用的是tlt的正本(克隆品)。
/**
* 利用了ThreadLocal的类
*
* @author leizhimin 2010-1-5 10:35:27
*/
public class MyThreadLocal {
//界说了一个ThreadLocal变量,用来保留int或Integer数据
private ThreadLocal<Integer> tl = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
public Integer getNextNum() {
//将tl的值猎取后加1,并更新设置t1的值
tl.set(tl.get() + 1);
return tl.get();
}
}
/**
* 测试线程
*
* @author leizhimin 2010-1-5 10:39:18
*/
public class TestThread extends Thread {
private MyThreadLocal tlt = new MyThreadLocal();
public TestThread(MyThreadLocal tlt) {
this.tlt = tlt;
}
@Override
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println(Thread.currentThread().getName() + " " + tlt.getNextNum());
}
}
}
/**
* ThreadLocal测试
*
* @author leizhimin 2010-1-5 10:43:48
*/
public class Test {
public static void main(String[] args) {
MyThreadLocal tlt = new MyThreadLocal();
Thread t1 = new TestThread(tlt);
Thread t2 = new TestThread(tlt);
Thread t3 = new TestThread(tlt);
Thread t4 = new TestThread(tlt);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
<p>
你希望java的IDE整合。这个是没有必要的,重要的是你理解java有多深以及怎么组织你的代码,即使没有IDE,代码照样能够编译运行的。 |
|