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

© 袁世宇 黑马帝   /  2011-11-18 19:45  /  2098 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 袁世宇 于 2011-11-21 13:54 编辑

同步和异步那个是安全的,还有能帮忙举例说明下有那些优缺点吗?

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 面试问题

查看全部评分

5 个回复

倒序浏览
本帖最后由 潜王伟 于 2011-11-18 20:08 编辑

同步是线程安全的。异步不是线程安全的,容易导致死锁,如果一个线程死掉就会导致整个进程崩溃。
但没有同步机制的存在,性能会有所提升。这就是优缺点...(我只知道这些,请大家补充。。。)

例如:

当创建一个Vector对象时候,

Vector ve=new Vector();
ve.add("1");

当在多线程程序中,第一个线程调用修改对象ve的时候,就为其上了锁,其他线程只有等待。

当创建一个ArrayList对象时候,

ArrayList list=new ArrayList();
list.add("1");

当在多线程程序中,第一个线程调用修改对象list的时候,没有为其上锁,其他线程访问时就会报错。

eg:list.remove("1"),然后再由其他线程访问list对象的1时就会报错。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
徐杨 黑马帝 2011-11-18 21:00:45
板凳
同步可以解决安全问题的根本原因就在那个对象上。该对象如同锁的功能。
同步的前提:
同步需要两个或者两个以上的线程。
多个线程使用的是同一个锁。
同步的弊端:
当线程相当多时,因为每个线程都会去判断同步上的锁,很浪费资源

异步更有效率 但是安全系数降低

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
1.为了防止多个线程并发对同一数据的修改,所以需要同步,否则会造成数据不一致(就是所谓的:线程安全。如java集合框架中Hashtable和Vector是线程安全的。我们的大部分程序都不是线程安全的,因为没有进行同步,而且我们没有必要,因为大部分情况根本没有多线程环境)。
2.同步可以避免出现死锁,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改。
异步则是可以提高效率了,现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的。
同步和异步最大的区别就在于。一个需要等待,一个不需要等待。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马