package com.iteye.javaso.demo;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CopyOfConCurrentHashMapThreadTest2 {
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<String, String>();
public static void main(String args[]) {
CopyOfConCurrentHashMapThreadTest2 test = new CopyOfConCurrentHashMapThreadTest2();
Runnable sleep = new ThreadSleep2(test, "第一條線程");
ThreadSecond2 charge2 = new ThreadSecond2(test, "改變值的第2線程");
ThreadSecond2 charge3 = new ThreadSecond2(test, "改變值的第3線程");
ThreadSecond2 charge4 = new ThreadSecond2(test, "改變值的第4線程");
ThreadSecond23 chargeXX = new ThreadSecond23(test, "改變值的XXXX線程");
ExecutorService exc = Executors.newFixedThreadPool(5);
exc.execute(sleep);
exc.execute(charge3);
exc.execute(charge2);
exc.execute(chargeXX);
exc.execute(charge4);
exc.shutdown();
System.out.println("洗洗睡吧----------------");
try {
Thread.sleep(16000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("多個線程后,最終運行結果:" + test.map.get("firstKey"));
}
public void put(String value, int state) {
map.put("firstKey", value);
// Thread thread= Thread.currentThread();
if (state == 0) {
System.out.println("開始睡覺了--------------");
try {
Thread.sleep(4000);
System.out.println("睡醒了-------");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class ThreadSleep2 extends Thread {
ConcurrentHashMap<String, String> map;
public ThreadSleep2(ConcurrentHashMap<String, String> map, String threadName) {
this.map = map;
this.name = threadName;
}
CopyOfConCurrentHashMapThreadTest2 test;
public ThreadSleep2(CopyOfConCurrentHashMapThreadTest2 test,
String threadName) {
super(threadName);
this.test = test;
this.name = threadName;
}
@Override
public void run() {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
System.out.println("---------------進入第一條線程-----睡十秒先--------");
System.out.println("第一條線程未設置前值為:*** " + test.map.get("firstKey"));
test.put(name, 0);
System.out.println("第一條線程執行完畢 Map中值為:" +test.map.get("firstKey"));
}
String name = "";
public String toString() {
return "當前線程的名字是:" + name;
}
}
class ThreadSecond2 extends Thread {
ConcurrentHashMap<String, String> map;
public ThreadSecond2(ConcurrentHashMap<String, String> map,
String threadName) {
super(threadName);
this.map = map;
this.name = threadName;
}
CopyOfConCurrentHashMapThreadTest2 test;
public ThreadSecond2(CopyOfConCurrentHashMapThreadTest2 test,
String threadName) {
super(threadName);
this.test = test;
this.name = threadName;
}
@Override
public void run() {
System.out.println("-----------進入其它線程---------");
System.out.println("當前線程是:" + this.name + " 未設置map前值為:"
+ test.map.get("firstKey"));
test.put(name, 2);
System.out.println("hashMap中 firstKey值為:" + name);
}
String name = "";
public String toString() {
return "當前線程的名字是:" + name;
}
}
class ThreadSecond23 extends Thread {
ConcurrentHashMap<String, String> map;
public ThreadSecond23(ConcurrentHashMap<String, String> map,
String threadName) {
super(threadName);
this.map = map;
this.name = threadName;
}
CopyOfConCurrentHashMapThreadTest2 test;
public ThreadSecond23(CopyOfConCurrentHashMapThreadTest2 test,
String threadName) {
super(threadName);
this.test = test;
this.name = threadName;
}
@Override
public void run() {
System.out.println("-----------進入XXXXXXX線程---------");
System.out.println("當前線程是:" + Thread.currentThread().getName());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
test.put(name, 2);
System.out.println("hashMap中 firstKey值為:" + name);
}
String name = "";
public String toString() {
return "當前線程的名字是:" + name;
}
}