黑马程序员技术交流社区

标题: 关于线程同步的问题 [打印本页]

作者: 郑雪    时间: 2013-5-4 10:18
标题: 关于线程同步的问题
复习集合这一部分的时候有些一个疑问:线程是同步的和线程是不同步的各有什么好处?
印象中,线程同步安全,疑惑的是为什么会有线程不同步的代替了线程同步的(像ArrayList替代了Vector)?

作者: hou604720966    时间: 2013-5-4 10:28
http://blog.sina.com.cn/s/blog_7d25555d0101as5s.html
你可以看看这个
作者: lpflpy    时间: 2013-5-4 10:46
1.线程同步可以保证多线程运行时的安全,但是由于同步时每次都要判断锁,所以会降低执行效率;而线程不同步运行时,不需要判断锁,这样就会提高效率,缺点是不能保证多线程安全。
2.Vector是JDK1.0就有了,而ArrayList是JDK1.2出现的,Vector之所以被代替肯定是有其缺点的:
比如,他提供的addElement(Object obj)等方法,名字都过长;
通过查API文档可以发现他里面有很多功能重复的方法;
还有就是它实现了线程同步,所以性能低。
而ArrayList出现后,将Vector的方法名字变短,如add(Object obj)与addElement(Object obj)的功能是一样的,他里面没有方法名很长的方法;
虽然当多条线程访问一个ArrayList时,会出现安全问题,但是collections 工具类中提供了synchronizedCollection(Collection<T> c) 方法来保证ArrayList的多线程安全。
如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高执行效率。

呵呵,也是刚开始学习,以上是我的浅见,多指教!
作者: 何羡玉    时间: 2013-5-4 15:57
线程同步安全肯定是安全的,线程不同步的时候也不一定就是不安全的。这要具体问题具体分析,有些情况下没有必要用不同的,可是用不同步的也不会出事,这就要回分析了。哪种情况下该用什么。arrayList中好像有一个方法,传一个不安全的集合给它,它就返回一个安全的集合。
作者: 黄玉昆    时间: 2013-5-4 22:50
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
作者: 刘学明       时间: 2013-5-4 23:05
线程同步安全 但因为同步每次都需要判断synchronized或者lock锁 那么在执行起来效率就会大大降低
线程不同步 不是很安全 但是不需要每次都判断  那么在执行起来效率就会很高
所以选择同步还是不同步 要看做的程序和项目来定  需要高并发线程的那么需要线程同步肯定是安全的
但是如果这个程序只有一个或几个线程来执行 就没必要用到同步类或方法。
  
楼主要了解 有利就有弊   就好比 JAVA的新特性 泛型  泛型写起来多麻烦  为什么还要增加 因为大大增加了程序的安全性。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2