在日常工作中,经常会遇到起多个线程,同时起一个变量进入线程中对该变量进行一系列操作,而且不同得线程都需要分配一个初始化得参数变量,简单说:线程x--变量n
解决此问题得方法即使用hash得key-value来解决,直接看代码
package 测试;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TestMapThread {
private static int data = 1;
private static Map<Thread, Integer> map = new HashMap<Thread, Integer>(); //定义一个Map以键值对的方式存储每个线程和它对应的数据,即Thread:data
public static void main(String[] args) {
ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
for (int i = 0; i < 10; i++) {
pool.schedule(new Runnable() {
@Override
public void run() {
int temp = new Random().nextInt();
System.out.println(Thread.currentThread() + "has put a data:" + temp);
map.put(Thread.currentThread(), temp);
data = temp;
getData();
}
}, 1, TimeUnit.SECONDS);
}
}
//在实际写代码过程中遇到很多这样类似并发线程问题,通过hash来维护一个线程所对应得变量
public static void getData() {
System.out.println("A get data from " + Thread.currentThread().getName() + ": "
+ map.get(Thread.currentThread())); //取出各线程维护的那个副本
}
}
经过测试,可以发现通过map维护一个线程对应一个变量: