2 u013179958 u013179958 于 2016.03.28 19:45 提问

只要线程同步,线程就是安全的,这句话对不对?

例如一些银行项目里非常重要的方法(操作金额,对金额进行计算之类的),在java里直接用synchronized修饰,那么他就不会出现计算错误的情况了

3个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.28 19:59
已采纳

同步了线程就会安全。web工程中每一个浏览器发出的http请求到达服务器的时候,服务器都会建立一个新的线程来处理请求,一般我们写的action中很少会有静态的变量,如果没有静态变量(静态变量都是所有action中唯一的,这些变量属于类,而不是属于某一个实例,也就是说静态变量是实例间共享的),那就不用关心线程安全的问题。如果有静态变量的话,就需要关心线程安全问题了。假设你的类中的方法会对静态变量进行操作。还有一种情况是你的类方法中如果对数据库进行操作的话为了保证操作的原子性则需要在方法上加上关键字synchronized。总结一下,线程如果不涉及到操作公共变量的时候就不要同步,否则就需要同步才能保证线程安全。

u013179958
u013179958 回复小灸舞: 搜噶,你说static我不就知道了 哈哈
一年多之前 回复
qq423399099
qq423399099 回复据说名字太长不容易被发现: 静态的并不是常量。。。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
一年多之前 回复
u013179958
u013179958 银行项目,操作的账户里的钱,钱算不算你说的静态变量,都是静态了,为什么还变量,静态的不是常量吗?
一年多之前 回复
hjcenry
hjcenry   2016.03.28 19:57

锁也不是可以随便用的,虽然锁能保证并发同步,不至于错误,但如果锁的范围没控制好,不该上锁的部分也上锁了,就可能产生性能问题,你可以想象下,你对整个逻辑接口上锁,那么这么接口必然会以单线程的形式工作,效率一定不及多线程的

u013179958
u013179958 多线程+同步,这个应该可以做到吧,这样既保证了效率,又保证了安全
一年多之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.28 20:29

显然不对啊,也可能会出现使用不当导致线程死锁问题的。

u013179958
u013179958 是啊,一般只要把特定的核心方法,修饰成sy,就可以了吧 ,这样就不会出现死锁的问题了
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!