下面的工厂类用于获取执行驱动程序public class DriverFactory { //holds the device config public static Map<String, String> devConfig = new ConcurrentHashMap<>(); //other lines of code follow}该配置从外部数据源加载到junit类中,如下所示:@RunWith(ConcurrentTestRunner.class)public class MyTestRunner{ static final int THREAD_COUNT = 1; @ThreadCount(THREAD_COUNT) @Override @Test public void run(){ // Devices class returns config for the device DriverFactory.devConfig = Devices.getConfig() //other lines of code to perform execution }}如果执行期间其他类中需要设备配置,则可以通过以下方式访问它:public class MobileActions{ public void swipe(){ String pf = DriverFactory.devConfig.get("Platform"); //other lines of code }}这种将devConfig设置为静态的方法可以正常工作,只有一个线程。现在,为了支持跨设备并行执行,如果将线程数更改为2,则devConfig将始终具有由第二个线程设置的值。为了避免此问题,如果将devConfig设为非静态,则必须在所有其他类中(例如,在上述MobileActions类中)注入此变量。有没有一种方法可以使该变量保持静态,但在多线程执行期间仍然可以工作(每个线程应处理自己的devConfig副本)。我们还尝试将此变量设置为ThreadLocal ,但这也无济于事。任何帮助深表感谢!谢谢 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 将DriverFactory中的devConfig设为私有。提供它的获取器和设置器。如果您需要特定于线程,请将其设为threadlocal。public class DriverFactory { // holds the device config private static final ThreadLocal<Map<String, String>> devConfig = ThreadLocal .withInitial(ConcurrentHashMap::new); public static String getDevConfig(String key) { return this.devConfig.get().get(key); } public static void setDevConfig(Map<String, String> config) { this.devConfig.get().putAll(config); }} (adsbygoogle = window.adsbygoogle || []).push({}); 10-05 21:25