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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kongling 中级黑马   /  2013-12-16 11:38  /  1601 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是同步和异步,有什么异同?各用在什么场景?

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

5 个回复

倒序浏览
Y_Y 中级黑马 2013-12-16 11:40:44
沙发
同步的前提:
        (1)必须保证有两个以上线程
        (2)必须是多个线程使用同一个锁,即多条语句在操作线程共享数据
        (3)必须保证同步中只有一个线程在运行
同步的好处和弊端
        好处:同步解决了多线程的安全问题
        弊端:多线程都需要判断锁,比较消耗资源
同步的两种表现形式:
        (1)同步代码块:
                可以指定需要获取哪个对象的同步锁,使用synchronized的代码块同样需要锁,但他的锁可以是任意对象
                考虑到安全问题,一般还是使用同一个对象,相对来说效率较高。

                注意:
                **虽然同步代码快的锁可以使任何对象,但是在进行多线程通信使用同步代码快时,
                  必须保证同步代码快的锁的对象和,否则会报错。
                **同步函数的锁是this,也要保证同步函数的锁的对象和调用wait、notify和notifyAll的对象是
                  同一个对象,也就是都是this锁代表的对象。
                格式:
                synchronized(对象)
                {
                        需同步的代码;
                }
        (2)同步函数
                同步方法是指进入该方法时需要获取this对象的同步锁,在方法上使用synchronized关键字,
                使用this对象作为锁,也就是使用了当前对象,因为锁住了方法,所以相对于代码块来说效率相对较低。
                注:静态同步函数的锁是该方法所在的类的字节码文件对象,即类名.class文件
                格式:
                修饰词 synchronized 返回值类型 函数名(参数列表)
                {
                        需同步的代码;
                }

        在jdk1.5后,用lock锁取代了synchronized,个人理解也就是对同步代码块做了修改,
        并没有提供对同步方法的修改,主要还是效率问题吧。

评分

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

查看全部评分

回复 使用道具 举报
1、举例:同步就是需要等待响应   
异步就是不需要等待相应
2、同步和异步最大的区别就在于。一个需要等待,一个不需要等待。
3、主要运用与线程中

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 Diaraelo 于 2013-12-16 12:14 编辑

简单来说同步就是给一个门上锁,被在多个人(多线程)要同时进入这个区域时候拿到锁和钥匙的人可以进入锁起门,不让其他线程进入。只有自己离开了才会释放掉锁,让下一个人进入
比如:卖票系统,如果不同步,可能2个人同时买一张票,那这个座位就有2个人坐,出现安全问题了

评分

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

查看全部评分

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

评分

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

查看全部评分

回复 使用道具 举报
同步:发送一个请求,等待返回,然后再发送下一个请求
异步:发送一个请求,不等待返回,随时可以再发送下一个请求

同步可以避免出现死锁,读脏数据的发生,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改。
异步则是可以提高效率了,现在cpu都是双核,四核。异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的。
这些都是对的。
同步和异步最大的区别就在于。一个需要等待,一个不需要等待。
比如广播,就是一个异步例子。发起者不关心接收者的状态。不需要等待接收者的返回信息
电话,就是一个同步例子。发起者需要等待接收者,接通电话后,通信才开始。需要等待接收者的返回信息

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马