peek

阻塞队列

扶醉桌前 提交于 2019-12-04 14:04:58
对于许多线程问题, 可以通过使用一个或多个队列以优雅且安全的方式将其形式化。生产者线程向队列插人元素, 消费者线程则取出它们。 使用队列, 可以安全地从一个线程向另 一个线程传递数据。 在使用队列的情况下,不需要同步,无需考虑线程之间的安全问题。(当然, 线程安全的队列类的实现者不能不考虑锁和条 件, 但是, 那是他们的问题而不是你的问题。) 当试图向队列添加元素而队列已满, 或是想从队列移出元素而队列为空的时候, 阻塞队 列(blocking queue ) 导致线程阻塞。 在协调多个线程之间的合作时, 阻塞队列是一个有用的 工具。 工作者线程可以周期性地将中间结果存储在阻塞队列中。 其他的工作者线程移出中间 结果并进一步加以修改。 队列会自动地平衡负载。 如果第一个线程集运行得比第二个慢, 第 二个线程集在等待结果时会阻塞。 如果第一个线程集运行得快, 它将等待第二个队列集赶上 来。 在JDK中,java.util.concurrent.BlockingQueue接口定义了阻塞队列的方法: 阻塞队列方法分为以下 3 类, 这取决于当队列满或空时它们的响应方式。 如果将队列当 作线程管理工具来使用, 将要用到 put 和 take 方法。 当试图向满的队列中添加或从空的队列 中移出元素时, add、 remove 和 element 操作抛出异常。 当然, 在一个多线程程序中,

集合之LinkedList

青春壹個敷衍的年華 提交于 2019-12-04 08:26:35
在JDK中,实现了链表这种数据结构,就是LinkedList,它是双向链表的实现。首先看看它的继承层次。了解它的功能: LinkeList继承的抽象类是AbstractSequentialList,在这个抽象类中有几个随机访问元素的方法,这与LinkedList基于链表实现相关,因为链表可以快速的add和remove而无需移动元素。上源码: /** * 在指定的index插入一个元素,原来位置的元素往后靠 * */ public void add(int index, E element) { try { // 调用listIterator的add方法,如果没有实现就会报错 UnsupportedOperationException listIterator(index).add(element); } catch (NoSuchElementException exc) { throw new IndexOutOfBoundsException("Index: "+index); } } /** * */ public E remove(int index) { try { // 根据index的到listIterator ListIterator<E> e = listIterator(index); // 这里注意,listIterator使用remove之前

并发容器学习—LinkedBlockingQueue和LinkedBlockingDueue

不羁岁月 提交于 2019-12-04 04:09:43
一、LinkedBlockingQueue并发容器 1.Linked BlockingQueue 的底层实现 与 ArrayBlockingQueue相似, Linked BlockingQueue也是一个阻塞队列,不过 Linked BlockingQueue的底层数据结构不是数组,而是链表 ,不过底层实现虽然是链表,但 Linked BlockingQueue中规定链表必须有界,即若内存足够,链表也不能是无限大的,链表最大只能 是 Integer. MAX_VALUE(默认容量)。 其底层结点的定义: //从这可知,LinkedBlockingQueue是个单链表 static class Node<E> { E item; //数据 Node<E> next; //后继结点 Node(E x) { item = x; } } 2.LinkedBlockingQueue的继承体系 LinkedBlockingQueue的继承关系如下图所示,由继承关系可知LinkedBlockingQueue与ArrayBlockingQueue实现的功能是相同的,只在存储数据结构上不同。其父类及实现的接口在之前的学习中都已分析过,这里不在多说。 3.重要的属性以及构造方法 在LinkedBlockingQueue中保证线程并发安全所使用的的方式与ArrayBlockingQueue相似

[转] Java 无界阻塞队列 DelayQueue 入门实战

我的梦境 提交于 2019-12-03 23:58:00
原文出处: http://cmsblogs.com/ 『 chenssy 』 DelayQueue是一个支持延时获取元素的无界阻塞队列。里面的元素全部都是“可延期”的元素,列头的元素是最先“到期”的元素,如果队列里面没有元素到期,是不能从列头获取元素的,哪怕有元素也不行。也就是说只有在延迟期到时才能够从队列中取元素。 DelayQueue主要用于两个方面: 缓存:清掉缓存中超时的缓存数据 任务超时处理 DelayQueue DelayQueue实现的关键主要有如下几个: 可重入锁ReentrantLock 用于阻塞和通知的Condition对象 根据Delay时间排序的优先级队列:PriorityQueue 用于优化阻塞通知的线程元素leader ReentrantLock、Condition这两个对象就不需要阐述了,他是实现整个BlockingQueue的核心。PriorityQueue是一个支持优先级线程排序的队列(参考 【死磕Java并发】-----J.U.C之阻塞队列:PriorityBlockingQueue ),leader后面阐述。这里我们先来了解Delay,他是实现延时操作的关键。 Delayed Delayed接口是用来标记那些应该在给定延迟时间之后执行的对象,它定义了一个long getDelay(TimeUnit unit)方法

Ubuntu18.04 下最好用的gif录制工具peek

▼魔方 西西 提交于 2019-12-03 20:50:16
  最近在写代码,需要找一个ubuntu下的录制屏幕工具,尝试了几个,发现peek是最好用的。这里就给大家推荐一下。   一 安装:   该软件是一个在gihtub上的开源软件,具体的安装方法如下: sudo add-apt-repository ppa:peek-developers/stable sudo apt update sudo apt install peek      二 使用:   方法一:在终端里面输入:peek   会弹出一个框框,点击开始,需要录制的屏幕就会在你的窗口中。具体操作如下:   $:peek   方法二:在搜索界面输入:peek也可以找到,打开即可。 来源: https://www.cnblogs.com/dylancao/p/11808454.html

Get the number of bytes available in socket by 'recv' with 'MSG_PEEK' in C++

醉酒当歌 提交于 2019-12-03 18:51:20
问题 C++ has the following function to receive bytes from socket, it can check for number of bytes available with the MSG_PEEK flag. With MSG_PEEK , the returned value of 'recv' is the number of bytes available in socket: #include <sys/socket.h> ssize_t recv(int socket, void *buffer, size_t length, int flags); I need to get the number of bytes available in the socket without creating buffer (without allocating memory for buffer ). Is it possible and how? 回答1: You're looking for is ioctl(fd

请在该类型中实现一个能够得到栈中所含最小元素的min函数

孤街醉人 提交于 2019-12-03 17:50:16
import java.util.Stack; public class Solution { Stack<Integer> stack1=new Stack<Integer>(); Stack<Integer> stack2=new Stack<Integer>(); public void push(int node) { stack1.push(node); if(stack2.isEmpty()) stack2.push(node); else if(stack2.peek()>=node) stack2.push(node); } public void pop() { if(stack1.peek()==stack2.peek()) stack2.pop(); stack1.pop(); } public int top() { return stack1.peek(); } public int min() { return stack2.peek(); } } 来源: oschina 链接: https://my.oschina.net/u/2511906/blog/3136279

C#: Using StreamReader to read line from txt file, but Peek() return -1 even there are a lot of lines left

十年热恋 提交于 2019-12-03 17:17:44
I use Peek() method of StreamReader to check whether there are more lines need to be processed. There are more than 1000 lines in my file, but Peek() suddenly return -1 when it reachs line#750. I checked but seems no differences between line#750 and #751. Even I deleted line#750 and 751, it will still break up at other line. Below are my codes for your information: try { String ftpserver = ftp + filename; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpserver)); reqFTP.UsePassive = false; reqFTP.UseBinary = true; reqFTP.Proxy = null; reqFTP.Credentials = new NetworkCredential(username,

Peek into Conn without reading in go

▼魔方 西西 提交于 2019-12-03 16:17:13
I have a server net.Conn , and I'd like to peek into it before reading out bytes, to check if it's a plain text protocol the client is trying to use, or SSL/TLS. Checking http://golang.org/pkg/net/ , it seems the Conn interface does not have anything like that. I know I could use an iobuf.Reader , but I'd like to get a TLS Conn via tls.Conn(conn, config) if it turns out the client is using SSL/TLS, and iobuf.Reader would read from the original Conn , thus the handshake in tls.Conn would fail. So is there any way to peek into a Conn in Go (something like MSG_PEEK in C/C++ sockets)? Or, to

Reading specific number of bytes from a buffered reader in golang

一世执手 提交于 2019-12-03 10:42:41
问题 I am aware of the specific function in golang from the bufio package. func (b *Reader) Peek(n int) ([]byte, error) Peek returns the next n bytes without advancing the reader . The bytes stop being valid at the next read call. If Peek returns fewer than n bytes, it also returns an error explaining why the read is short. The error is ErrBufferFull if n is larger than b's buffer size. I need to be able to read a specific number of bytes from a Reader that will advance the reader . Basically,