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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

评分

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

查看全部评分

6 个回复

倒序浏览
http://blog.sina.com.cn/s/blog_7d25555d0101as5s.html
你可以看看这个
回复 使用道具 举报
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

查看全部评分

回复 使用道具 举报
线程同步安全肯定是安全的,线程不同步的时候也不一定就是不安全的。这要具体问题具体分析,有些情况下没有必要用不同的,可是用不同步的也不会出事,这就要回分析了。哪种情况下该用什么。arrayList中好像有一个方法,传一个不安全的集合给它,它就返回一个安全的集合。

评分

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

查看全部评分

回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
线程同步安全 但因为同步每次都需要判断synchronized或者lock锁 那么在执行起来效率就会大大降低
线程不同步 不是很安全 但是不需要每次都判断  那么在执行起来效率就会很高
所以选择同步还是不同步 要看做的程序和项目来定  需要高并发线程的那么需要线程同步肯定是安全的
但是如果这个程序只有一个或几个线程来执行 就没必要用到同步类或方法。
  
楼主要了解 有利就有弊   就好比 JAVA的新特性 泛型  泛型写起来多麻烦  为什么还要增加 因为大大增加了程序的安全性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马