package thread.map;
import java.util.concurrent.ConcurrentHashMap;
public class Consumer implements Runnable {
private String name;
private ConcurrentHashMap<String, String> map;
private int fromIndex;
public Consumer(String name, ConcurrentHashMap<String, String> map, int fromIndex) {
this.name = name;
this.map = map;
this.fromIndex = fromIndex;
}
public void run() {
for (int i = fromIndex; i < fromIndex + 20; i++) {
String str = String.valueOf(i);
map.remove(str);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(name + ", remove. size:" + map.size());
}
}
package thread.map;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
public class View implements Runnable {
private String name;
private ConcurrentHashMap<String, String> map;
public View(String name, ConcurrentHashMap<String, String> map) {
this.name = name;
this.map = map;
}
public void run() {
Iterator<String> iter = map.values().iterator();
while (iter.hasNext()) {
String str = iter.next();
System.out.println(name + ", " + str);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package thread.map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
/**
* @author jzh add 2012-01-07
* @param args
*/
public static void main(String[] args) {
// 初始ConcurrentHashMap
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<String, String>();
for (int i = 0; i < 100; i++) {
String str = String.valueOf(i);
map.put(str, str);
}
// 创建一个线程池(创建一个可根据需要创建新线程的线程池)
// Executors 类提供了用于此包中所提供的执行程序服务的工厂方法
ExecutorService pool = Executors.newCachedThreadPool();
Consumer consumer0 = new Consumer("howsky0", map, 10);
Consumer consumer1 = new Consumer("howsky1", map, 40);
Consumer consumer2 = new Consumer("howsky2", map, 70);
View view = new View("jiang", map);
pool.execute(consumer0);
pool.execute(consumer1);
pool.execute(consumer2);
pool.execute(view);
pool.shutdown();
}
}