A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑雪 中级黑马   /  2013-5-4 10:18  /  1647 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

复习集合这一部分的时候有些一个疑问:线程是同步的和线程是不同步的各有什么好处?
印象中,线程同步安全,疑惑的是为什么会有线程不同步的代替了线程同步的(像ArrayList替代了Vector)?

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

6 个回复

正序浏览
线程同步安全 但因为同步每次都需要判断synchronized或者lock锁 那么在执行起来效率就会大大降低
线程不同步 不是很安全 但是不需要每次都判断  那么在执行起来效率就会很高
所以选择同步还是不同步 要看做的程序和项目来定  需要高并发线程的那么需要线程同步肯定是安全的
但是如果这个程序只有一个或几个线程来执行 就没必要用到同步类或方法。
  
楼主要了解 有利就有弊   就好比 JAVA的新特性 泛型  泛型写起来多麻烦  为什么还要增加 因为大大增加了程序的安全性。
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
线程同步安全肯定是安全的,线程不同步的时候也不一定就是不安全的。这要具体问题具体分析,有些情况下没有必要用不同的,可是用不同步的也不会出事,这就要回分析了。哪种情况下该用什么。arrayList中好像有一个方法,传一个不安全的集合给它,它就返回一个安全的集合。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
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是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高执行效率。

呵呵,也是刚开始学习,以上是我的浅见,多指教!

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
http://blog.sina.com.cn/s/blog_7d25555d0101as5s.html
你可以看看这个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马