黑马程序员技术交流社区

标题: 同步和异步的问题 [打印本页]

作者: 李敬    时间: 2012-8-24 09:07
标题: 同步和异步的问题
学到多线程的时候知道有同步这个概念,现在在张老师交通等管理系统中提到异步的概念,我怎么觉的都一样啊,越想越乱,不敢想了,简单的说下两个区别吧.
作者: 霍明波    时间: 2012-8-24 09:41
同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制,A线程请求不到,A线程只能等待下去
异步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为没有同步机制存在,A线程实现请求,A线程无需等待
显然,同步最最安全,最保险的。而异步不安全,容易导致死锁,这样一个线程死掉就会导致整个进程崩溃,但没有同步机制的存在,性能会有所提升
若果操作一个数据,仅仅是引用的话,不做修改,那异步比较好,如果是修改数据的话就要慎用了
作者: 孙鑫    时间: 2012-8-24 17:09
同步就是指一个线程要等待上一个线程执行完之后才开始执行当前的线程
异步是指一个线程去执行,它的下一个线程不必等待它执行完就开始执行

作者: 杜鹏云    时间: 2012-8-24 17:57
同步就是多线程里面的加锁问题,A线程使用加锁的资源,那么B线程请求该资源,那么必须等待A线程释放锁。即A线程执行完毕,B线程执行。当然这个前提是存在两个线程,存在共享的资源。
异步就是A和B线程运行起来没有限制,谁争取到CPU使用权谁就执行。异步容易引起死锁。即,互相等待释放同一个资源!

以上是我的理解,网络上有这么说:
http://www.kuqin.com/networkprog/20090221/35947.html

作者: na_qiang123    时间: 2012-8-24 18:11
用一些字来说明一下吧:同步运行的时候比如我想说一句话那可能会很完整的说出来。但是异步的话他可能会把我说的话和别人说的放到一起,整出混乱
作者: 唐见    时间: 2012-8-24 18:25
同一时刻只能有一个线程进入的语句块叫同步代码块。其他未加同步关键字的方法或语句都可以由多个线程同时访问,这样就形成了异步访问,同步代码块中一般用于定义操作共享数据的代码块。
作者: 唐见    时间: 2012-8-24 18:25
同一时刻只能有一个线程进入的语句块叫同步代码块。其他未加同步关键字的方法或语句都可以由多个线程同时访问,这样就形成了异步访问,同步代码块中一般用于定义操作共享数据的代码块。
作者: 周兴华    时间: 2012-8-24 19:03
同步:线程1要请求某个资源,但是此资源正在被线程2使用中,因为同步机制存在,线程1请求
不到,怎么办,线程1只能等待下去;
异步线程1要请求某个资源,但是此资源正在被线程2使用中,因为没有同步机制存在,线程1
仍然请求的到,线程1无需等待。
同步最最安全,最保险的。而异步不安全,容易导致死锁,这样一个线程死掉就会导致整个
进程崩溃,但没有同步机制的存在,性能会有所提升。
下图为同步线程与异步线程运行情况的比较:


作者: 周兴华    时间: 2012-8-24 19:09
如果一个线程调用了synchronized修饰的方法,它就能保证该方法在执行完毕前不会被另一个线程打断,这种运行机制叫做同步线程机制;
而之前没有使用synchronized修饰的方法,一个线程在执行的过程中可能会被其他线程打断,这种运行机制叫异步线程机制。
一般来说,在线程体内执行的方法代码中如果操作到(访问或修改)共享数据(成员变量),那么需要给其他方法加上synchronized标志。
这样就可以保证在另一个线程使用这个共享数据之前,这个线程能运行得到结束为止。
同步是需要付出代价的,每次调用同步方法时,都需要执行某个管理程序。




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