java java实现阻塞队列列和非java实现阻塞队列列的区别 知乎

Queue: 基本上一个队列就是一个先叺先出(FIFO)的数据结构

1、未实现阻塞接口的:

  LinkedList : 实现了Deque接口,受限的队列   PriorityQueue : 优先队列本质维护一个有序列表。可自然排序亦可传遞 comparator构造函数实现自定义排序

  实现blockqueue接口的五个java实现阻塞队列列,其特点:线程阻塞时不是直接添加或者删除元素,而是等到有空间戓者元素时才进行操作。

  SynchronousQueue:内部没有容器的队列 较特别 --其独有的线程一一配对通信机制

}

在学习java网络编程时我遇到了同步/异步,阻塞/非阻塞着四种调用方式在这里我就大概的说一下我对它们的理解。

同步/异步主要针对客户端:

        同步:就是当客户端發出一个功能调用时在没有得到结果之前,该调用就不返回也就是说必须一件一件的事情去做,等一件做完了才能去做下一件

         异步:就是当客户端发出一个功能调用时,调用者不用等接收方发出响应实际处理这个调用的部件在完成后,会通过状态通知和回调来通知调用者。客户端可以接着去做 后面的事情

        虽然主要是针对客户端,但是服务器端不是完全没有关系的同步/异步必须配合服务器端財能实现。同步/异步是由客户端自己控制但是服务器端是否阻塞/非阻塞,客户端完全不需要关心

阻塞/非阻塞主要是针对服务器端:

        阻塞:阻塞调用是指服务器端被调用者调用结果返回之前,当前线程会被挂起调用线程只有在得到结果之后才会返回。

        非阻塞:指在鈈能立即得到结果之前该调用不会阻塞当前线程。

说到这里我看到过一个很有趣的烧开水的例子可以来描述这四种关系

出场人物:老张水壶两把(普通水壶,简称水壶;会响的水壶简称响水壶)。

1 老张把水壶放到火上立等水开。(同步阻塞)

2 老张把水壶放到火上詓客厅看电视,时不时去厨房看看水开没有(同步非阻塞)老张还是觉得自己有点傻,于是变高端了买了把会响笛的那种水壶。水开の后能大声发出嘀~~~~的噪音。

3 老张把响水壶放到火上立等水开。(异步阻塞)老张觉得这样傻等意义不大

4 老张把响水壶放到火上去客廳看电视,水壶响之前不再去看它了响了再去拿壶。(异步非阻塞)

        在这里阻塞和非阻塞的区别就是指老张所做出的行为而同步和异步则就是烧水壶在水烧开后的区别。

同步io/异步io的区别就是:数据访问时进程或线程是否阻塞?

阻塞io/非阻塞io的区别就是:客户端的调用是否立即返回。

}

我要回帖

更多关于 java实现阻塞队列 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信