2015-02-23 51 views
4

我在我的j米测试计划中有一个线程组,我想要预先初始化两个地图。像Jmeter:如何初始化一次地图并将其分享给一个线程组中的所有线程

java.util.HashMap myMap1 = new java.util.HashMap(); 
myMap1.put("foo1","bar1"); 
myMap1.put("foo2","bar2"); 

java.util.HashMap myMap2 = new java.util.HashMap(); 
myMap2.put("mykey",myMap1); 

我必须使用它为不同的线程。任何人都可以帮我解决这个问题吗?

+0

使其'synchronized'或使用'concurrentHashMap' – 2015-02-23 05:22:00

+0

你想一个线程的地图,请参阅: http://stackoverflow.com/questions/3222512/thread-safe-hash-map – 2015-02-23 05:22:20

+0

@AstraBear t hanx但我正在谈论Jmeter线程组。 – bajrangi 2015-02-23 05:25:04

回答

3

取决于你所使用的测试元件的脚本可能有2种选择:

  1. 如果使用Beanshell Sampler - 中最简单的选项是使用bsh.shared名称空间作为

    在第一个线程组中:

    Map myMap1 = new HashMap(); 
    myMap1.put("foo","bar"); 
    bsh.shared.myMap = myMap1; 
    

    在第二线程组:

    Map myMap1 = bsh.shared.myMap; 
    log.info(myMap1.get("foo")); 
    
  2. 更 “通用” 的方法是使用JMeter的属性。在任何启用脚本的测试元素(JSR223采样器,BSF采样器等)中,当前的JMeter属性实例的简写为props,它基本上是java.util.Properties类的一个实例,因此它具有put()方法,该方法接受任意Java对象作为价值。所以

    在第一线组:

    Map myMap1 = new HashMap(); 
    myMap1.put("foo","bar"); 
    props.put("myMap", myMap1); 
    

    在第二线程组:

    Map myMap1 = props.get("myMap"); 
    log.info(myMap1.get("foo")); 
    
0

如果你需要在多个线程之间共享这样的东西,然后去单身对象。由于单个对象将在所有线程之间共享,因此所有线程都将看到相同的更改。

更多解释按照下面的代码片段: -

import java.util.HashMap; 

public class SingletonMap { 
    private HashMap myMap1 = null; 
    private HashMap myMap2 = null; 
    private static volatile SingletonMap singletonMapObj = null; 

    private SingletonMap(){ 
     myMap1 = new HashMap(); 
     myMap2 = new HashMap(); 

     myMap1.put("foo1","bar1"); 
     myMap1.put("foo2","bar2"); 

     myMap2.put("mykey",myMap1); 
    } 

    public static SingletonMap getSingletonMap(){ 
     if(singletonMapObj == null){ 
      new SingletonMap(); 
     } 

     return singletonMapObj; 
    } 
} 
+0

不,我正在谈论如何在jmeter(负载测试工具)配置中达到目标。 – bajrangi 2015-02-23 06:00:23

相关问题