当前位置: 代码迷 >> J2EE >> java进程间同步有关问题
  详细解决方案

java进程间同步有关问题

热度:456   发布时间:2016-04-17 23:47:16.0
java进程间同步问题,
有一个map,创建100个进程,向里面加元素,又创建了200个进程,减元素,怎么实现同步,组后总是不能输出800
该怎么实现
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestMultiThread{
    ?    ?public static Map<String,Vector<String>> map = new HashMap<String,Vector<String>>();
       ? ?public static void main(String[] args) {
    ?       ?    ? ?ExecutorService executor = Executors.newCachedThreadPool();
    ?    ?    ?    ?for(int i = 0 ; i < 1000; i++){
    ?    ?    ?    ?    ?    ?executor.execute(new AddMap("username","asd",map));
    ?    ?    ?    ?    ?}
    ?    ?    ?    ?for(int i = 0 ; i < 200; i++){
    ?    ?    ?    ?    ?    ?    ?    ?executor.execute(new DeleteMap("username","asd",map));
    ?    ?    ?    ?}
    ?    ?    ?    ?executor.shutdown();
    ?    ?    ?    ?while(!executor.isTerminated());
    ?    ?}
    ?    ?public static void mapSize(String username){
    ?    ?    ?    ?System.out.println(map.get(username));
    ?    ?    ?    ?System.out.println(map.get(username).size());
    ?    ?}
}
class AddMap extends Thread{
    ?    ?    ?public Map<String,Vector<String>> map = new HashMap<String,Vector<String>>();
    ?    ?    ?private String username;
    ?    ?    ?private String value;
    ?    ?    public AddMap(String username,String value,Map<String,Vector<String>> map){
    ?    ?    ?    ?    ?    ?    ?this.username = username;
    ?    ?    ?    ?    ?    ?    ?this.value = value;
    ?    ?    ?    ?    ?    ?    ?this.map = map;
    ?    ?    ?}
    ?    ?    ?public void run(){
    ?    ?    ?    ?    ?    ?synchronized(map){
    ?    ?    ?    ?    ?    ?    ?    ?    ?addMap(username,value);
    ?    ?    ?    ?    ?    ?    ?    ?    ?TestMultiThread.mapSize(username);
    ?    ?    ?    ?    ?    ?    ?    ?    ?map.notifyAll();
    ?    ?    ?    ?    ?    ?    ?}
}
private  void addMap(String username,String value){
    ?    ?    ?    ?    ?if(!map.containsKey(username)){
    ?    ?    ?    ?    ?    ?    ?    ?    ?map.put(username, new Vector<String>());
    ?    ?    ?    ?    ?    ?    ?    ?    ?    ?map.get(username).add(value);
  相关解决方案