黑马程序员技术交流社区
标题:
线程的问题
[打印本页]
作者:
袁世宇
时间:
2011-11-18 19:45
标题:
线程的问题
本帖最后由 袁世宇 于 2011-11-21 13:54 编辑
同步和异步那个是安全的,还有能帮忙举例说明下有那些优缺点吗?
作者:
小王同志
时间:
2011-11-18 20:03
本帖最后由 潜王伟 于 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时就会报错。
作者:
moonlight
时间:
2011-11-18 20:10
果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
作者:
徐杨
时间:
2011-11-18 21:00
同步可以解决安全问题的根本原因就在那个对象上。该对象如同锁的功能。
同步的前提:
同步需要两个或者两个以上的线程。
多个线程使用的是同一个锁。
同步的弊端:
当线程相当多时,因为每个线程都会去判断同步上的锁,很浪费资源
异步更有效率 但是安全系数降低
作者:
赵磊5
时间:
2011-11-20 16:08
1.为了防止多个线程并发对同一数据的修改,所以需要同步,否则会造成数据不一致(就是所谓的:线程安全。如java集合框架中Hashtable和Vector是线程安全的。我们的大部分程序都不是线程安全的,因为没有进行同步,而且我们没有必要,因为大部分情况根本没有多线程环境)。
2.同步可以避免出现死锁,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改。
异步则是可以提高效率了,现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的。
同步和异步最大的区别就在于。一个需要等待,一个不需要等待。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2