问题描述
由于项目原因,使用HTTPS通信,里面会用到代码指定证书环境,以下代码就是指定方法,可能会多个线程运行,XX和YY多个线程值不一样,请高手告知是否会有线程安全问题。System.setProperty("javax.net.ssl.keyStore",XX); System.setProperty("javax.net.ssl.keyStorePassword",YY);
解决方案
1、System.setProperty("javax.net.ssl.keyStore",XX); System.setProperty("javax.net.ssl.keyStorePassword",YY);这是全局设置 可以考虑在程序启动后设置一次就行难道每次都是不同的证书?
解决方案二:
线程安全的。。底层是通过hashtble来实现的
解决方案三:
System.setProperty()是jre系统的全局变量,设置了会影响所有的调用,不能这么干,你可以用一个ThreadLocal把这些参数存起来,有一个老帖子关于它的争论,希望能够帮助到你:http://www.iteye.com/problems/20549
解决方案四:
这个问题我也遇到过,是用Authenticator.setDefault()方法的时候,不知道是不是线程安全的,所以没敢用。Authenticator.setDefault()跟System.setProperty()应该差不多,文档没说线程安全,而且看源码有不少synchronized,却没有ThreadLocal,所以猜测应该不是线程安全的。如果猜测错误,恳请高手解惑!如果不是线程安全的,这俩玩意儿如何在多线程环境中使用呢?如果不能解决此问题,这俩玩意儿岂不是鸡肋。。。
解决方案五:
会的。多个线程同时set,get的时候就会乱掉。可能的话,上ThreadLocal好些。