JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal并不是一个Thread,而是Thread的局部变量示例为每一个查询创建一个线程,ThreadLocal提供局部变量的思想实现代码分离
如图写一个小功能实现查询小明 小红 小江 身高的代码。
package demo;
public class Main {
static String[] names = new String[] { "小红", "小明", "小江", "小红", "小明", "小江"};
static int index = 0;
public static void main(String[] args) {
for (int i = 0; i < names.length; i++) {
Thread t = new Thread() {
@Override
public void run() {
// 为每一个查询创建一个线程
ThreadLocalUtils.DATA.set(this.getName());
// 用SQLSearch将数据查询的逻辑部分实现代码分离
System.out.println(new SQLSearch().run());
}
};
t.setName(names[index++]);
t.start();
}
}
}
package demo;
public class SQLSearch implements MyRunnable {
public String run() {
//返回查询结果
return search(ThreadLocalUtils.DATA.get());
}
// 模拟查询
private String search(String name) {
String result=null;
// Sql
if (name.equals("小明")) {
result = (name + "185身高");
}
if (name.equals("小红")) {
result = (name + "160身高");
}
if (name.equals("小江")) {
result = (name + "180身高");
}
return result;
}
}
package demo;
public interface MyRunnable {
public String run();
}
package demo;
public class ThreadLocalUtils {
public static final ThreadLocal<String> DATA = new ThreadLocal<String>();
}