Java中的同步与异步


在一篇博文里找到下面这些通俗的比喻 把同步和异步讲解的很透彻 转截过来

 

举个例子:普通B/S模式(同步)AJAX技术(异步)   
           
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
   
           
异步:   请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

          

           同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。    

           异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。   

所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。

以通讯为例   
           
同步:发送一个请求,等待返回,然后再发送下一个请求
   
           
异步:发送一个请求,不等待返回,随时可以再发送下一个请求
   
           
并发:同时发送多个请求



百度百科容器的文章,看到介绍 ArrayList 和HashMap是异步,Vector和HashTable是同步,这里同步是线程安全的,异步不是线程安全的,举例说明: 

当创建一个Vector对象时候, 

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

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

当创建一个ArrayList对象时候, 

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

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

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


但问题是,为什么Vector的对象有上锁,而ArrayList的对象没有上锁呢???(估计是Java语言底层的限制,在此希望网友能分享见解给我。)


原文:点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值