posts - 262,  comments - 221,  trackbacks - 0

不管是自己排队的同步模式,还是等待通知的异步模式。它们终究都有一个等待的过程,在这个等待的过程中,等待者能否做别的事情,决定了它是阻塞还是非阻塞。

①同步的操作,如果在等待的过程不能做别的事情,它是同步+阻塞的。这个也是最常见的
②同步的操作,如果在等待的过程可以做别的事情,它是同步+非阻塞的。
③异步的操作,如果在等待的过程不能做别的事情,它是异步+阻塞的。
④异步的操作,如果在等待的过程可以做别的事情,它是异步+非阻塞的。这个也是最常见的

由于通常的同步操作中,等待是通过循环来完成的,在消息没有到来之前一直都是简单的循环,它就是同步+阻塞的模式。在异步操作中,等待通常由监听器,事件触发完成。在消息没有到来之前可以继续做别的事情,消息到来后再切换到处理逻辑。而且这个过程通常是由多线程实现的,所以它是异步+非阻塞的模式。

但如果主线程一直等待另外一个子线程接收到消息通知后才进行后续的操作,那么它实际上是异步+阻塞的模式。它的阻塞不是发生在子线程处理消息的过程,而是发生在等待子线程接收到通知消息的过程。


-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2010-03-10 15:36 Paul Lin 阅读(2507) 评论(2)  编辑  收藏 所属分类: J2SE


FeedBack:
# re: 【Java基础专题】IO与文件读写---对同步/异步和阻塞/非阻塞的理解
2010-03-11 13:47 | 5452
600多人看了啊,不知道误导了多少人。。。
同步异步是相对概念,阻塞非阻塞是相对应的概念,这四个东西没有必然的联系。  回复  更多评论
  
# re: 【Java基础专题】IO与文件读写---对同步/异步和阻塞/非阻塞的理解[未登录]
2010-03-11 18:05 | Paul Lin
@5452

这不就是我文章中想阐明的观点吗?

同步的情况下可以存在阻塞、非阻塞。异步的情况下也可以存在阻塞、非阻塞的读写。

要不也不会出现上面列出的4种情况啦  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(19)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜