首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java线程阻塞

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一 定已经很熟悉了。Java 提供了大量方法来支持阻塞,下面让我们逐一分析。   ...初看起来这十分不可思议,但是实际上却是很自然的,因为这一对方法阻塞 时要释放占用的锁,而锁是任何对象都具有的,调用任意对象的 wait() 方法导致线程阻塞,并且该对象 上的锁被释放。...而调用 任意对象的notify()方法则导致因调用该对象的 wait() 方法而阻塞的线程中随 机选择的一个解除阻塞(但要等到获得锁后才真正可执行)。   ...遗憾的是,Java 并不在语言级别上支持死锁的避免,我们在编程中必须小 心地避免死锁。   ...以上我们对 Java 中实现线程阻塞的各种方法作了一番分析,我们重点分析了 wait() 和 notify() 方法,因为它们的功能最强大,使用也最灵活,但是这也导致了它们的效率较低,较容易出错。

1.1K10

Java阻塞队列

什么是阻塞队列 原文地址为,转载请注明出处! 阻塞队列是一个支持阻塞的插入和移除的队列。 支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。...支持阻塞的移除方法:意思是队列为空时,获取元素(同时移除元素)的线程会被阻塞,等到队列变为非空。...一直阻塞:当阻塞队列满时,如果生产者线程往队列里面put元素,则生产者线程会被阻塞,知道队列不满或者响应中断退出。当队列为空时,如果消费者线程从队列里take元素。...超时退出:当阻塞队列满时,如果生产者线程往队列里插入元素,队列会阻塞生产者线程一段时间,如果超过了指定时间,生产者线程就会退出。 如果是无界阻塞队列,队列则不会出现满的情况。...阻塞队列 ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列 LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列 PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列

48220
您找到你想要的搜索结果了吗?
是的
没有找到

阻塞阻塞读写总结、tcp网络编程的本质、muduo::Buffer设计简介

但如果 socket文件描述符有 O_NONBLOCK标志,则 write不阻塞,直接返回 20;此时非阻塞地read 也直接返回20。.../usr/include/i386-linux-gnu/bits/socket.h     MSG_WAITALL = 0x100 5、在多线程环境中,某个线程的阻塞不会引起进程的阻塞,除非进程中的所有线程都被阻塞...(pthread) 二、TCP网络编程的本质 TCP网络编程最本质是的处理三个半事件(来自:muduo manual.pdf) 1....TCP 连接一旦建立,客户端和服务端是平等的,可以各自收发数据。 2. 连接的断开,包括主动断开(close 或shutdown) 和被动断开(read(2) 返回0)。 3....对于低流量的服务,可以不必关心这个事件;另外,这里“发送完毕”是指将数据写入操作系统的缓冲区,将由TCP 协议栈负责数据的发送与重传,不代表对方已经收到数据。

3.2K20

Java同步和异步,阻塞和非阻塞

阻塞和非阻塞属于进程API执行动作的方式, 关注的是程序在等待调用结果时的状态. 阻塞是指: 调用结果返回之前, 当前线程会被挂起. 函数只有在得到结果之后才会返回, 线程需要等待结果....非阻塞是指: 与阻塞的概念相对应, 指在不能立刻得到结果之前, 该函数不会阻塞当前线程, 而会立刻返回. 线程不需要等待结果....Java中的同步和异步 定义: 任务A, 任务B 同步: 任务A和任务B之间有关联, 例如任务B中途要给任务A一个数字, 那么任务A或许需要等待任务B生产这个数, 任务A需要等待任务B的这个动作叫做同步...下面给出Java代码的例子. 同步阻塞: int i = System.in.read(); 当命令终端没有输入时, 调用该方法的线程被阻塞 ,表现出和终端同步....异步阻塞: 没有例子. 阻塞就是用来实现同步的,这和同步阻塞有什么区别, 那实现它还有什么用呢?

5.4K31

TCP发送缓存阻塞(Send-Q不为0)问题

打开OSD和MS的日志发现消息并没有阻塞在软件层,而是软件层已经将调用了sendmsg系统调用往外发,但是对端还是没有收到消息。...常见的TCP发送端send-Q不减少都是因为接收端接收缓存满了给发送端回复win=0的反压报文,发送端不再给接收端发送报文导致send-Q不减少,但是通过接收端的tcpinfo信息来看,接收端的接收缓存为空...调整发送缓存大小: 最初怀疑是不是跟服务器的tcp读写缓存相关,但是服务器配置的最大的发送缓存和接收缓存都已经非常大,按理说也不会有影响。...,这其实是一个问题,不管TCP大小修改为多小,最多就是消息发送缓慢,而不是卡住不发送,改小了发送缓存后,抓包分析。...结论: 疯狂google后发现有人遇到了类似的问题,原来是tcp的bug, 内核修复了后该问题不再出现。

6.1K20

Java并发编程:阻塞队列

Java并发编程:阻塞队列   在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList)...本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法,接着分析了阻塞队列的实现原理,最后给出了一个实际例子和几个使用场景。   ...请尊重作者劳动成果,转载请标明原文链接:    http://www.cnblogs.com/dolphin0520/p/3932906.html 一.几种主要的阻塞队列   自从Java 1.5之后,...在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个:   ArrayBlockingQueue:基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小...参考资料:   《Java编程实战》 http://ifeve.com/java-blocking-queue/ http://endual.iteye.com/blog/1412212 http

98740

Java集合--阻塞队列(引言)

Java多线程编程中,生产者消费者模型,想必大家都在熟悉不过了,简单来说就是一部分线程负责向容器中生产,而另一部分线程负责从容器中获取。 在这个模型当中,Java主要利用队列的数据结构进行实现。...为了保证数据的安全,Java提供了两种线程安全的Queue队列,分为阻塞队列和非阻塞队列(并发队列)。...下面,我们就具体来说说阻塞队列额非阻塞队列的不同实现! 5.7.1 阻塞队列 在具体讲解阻塞队列之前,需要先跟大家明确一个概念! 什么是阻塞队列?...这就是阻塞队列。 直白的来说:队列满时,生产线程停止生产;队列空时,消费线程停止活动。 阻塞队列怎么进行阻塞操作 对于队列(集合)来说,最常用的操作,无疑只有两类,一种是添加操作,一种是移除操作!...在Java中,java.util.concurrent包提供了很多阻塞队列的实现。 其中,包括: ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。

988120

java中的阻塞队列

阻塞队列 阻塞队列 什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。...阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。...移除方法,则是从队列里拿出一个元素,如果没有则返回null ·一直阻塞:当阻塞队列满时,如果生产者线程往队列里put元素,队列会一直阻塞生产者线程,直到拿到数据,或者响应中断退出。...当队列空时,消费者线程试图从队列里take元素,队列也会阻塞消费者线程,直到队列可用。 ·超时退出:当阻塞队列满时,队列会阻塞生产者线程一段时间,如果超过一定的时间,生产者线程就会退出。...默认情况下不保证访问者公平的访问队列, 所谓公平访问队列是指阻塞的所有生产者线程或消费者线程,当队列可用时,可以按照阻塞的先后顺序访问队列,即先阻塞的生产者线程,可以先往队列里插入元素,先阻塞的消费者线程

86320

Java开发中同步异步、阻塞阻塞知识总结

描述网络通信模式,适用于请求-响应模型) 同步:发送方发送请求后,需要等待接收响应,结果占用并浪费了CPU资源 异步:发送方发送请求后,不需要响应,可以继续发送下一个请求,或者主动挂起线程并释放CPU资源 阻塞.../非阻塞(描述进程的函数方法调用方式) 阻塞:IO 调用会一直阻塞,直至调用结果返回后,才能继续执行 非阻塞:IO 调用可以立即返回,并执行下一个 IO 调用 总结,同步异步和阻塞阻塞是两个不同的概念...不需要数据库响应,可以继续处理另一个请求(NIO模式、回调通知模式),或者将任务插入一个队列中,主动挂起自身线程并释放CPU资源(异步队列模式),这就是异步 在第2点中,如果采用异步队列模式,会造成线程阻塞...,直至获得数据库数据后,才能继续执行,这就是阻塞 在第2点中,如果采用NIO模式、回调通知模式,则意味着数据库IO调用可以立即返回,这就是非阻塞 一般来说,同步是最简单的编程方式,而异步编程虽然需要一定的技术和工作量...对于阻塞与非阻塞阻塞方式的实时响应性更好,但是挂起与唤醒线程的性能损耗更高,而非阻塞方式的性能、吞吐量更高,但是由于其是顺序执行每一个事件,一旦处理某一个事件过久,会直接影响后续事件的处理,因此实时响应性比较差

91720

Java中的阻塞队列

一丶什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个可以进行阻塞插入和阻塞移除的附加方法的队列。 1)阻塞插入:当队列满后,队列会阻塞(拒绝)插入元素,直到队列不满。...2)阻塞移除:当队列为空时,队列会阻塞(拒绝)移除元素,直到队列里有元素。...:支持优先级排序的无界阻塞队列 DelayQueue:使用优先级队列实现的无界阻塞队列 SynchronousQueue:不存储元素的阻塞队列 LinkedTransferQueue:由链表结构组成的无界阻塞队列...LinkedBlockingDeque:由链表结构组成的双向阻塞队列 三丶阻塞队列的实现原理 介绍过阻塞队列后博主想到的第一个应用就是生产者和消费者场景,阻塞队列是如何实现的,那我们可以想象一下用一般的多线程是如何实现生产者和消费者场景的...的实现: public class ArrayBlockingQueue extends AbstractQueue implements BlockingQueue, java.io.Serializable

87360

网络编程(TCP服务端客户端互访阻塞

byte[]字节数组 获取String对象,new出来,构造参数:byte[]字节数组,0开始,len长度 调用Socket对象的close()方法,关闭socket 客户端的输入流读取read()方法,是阻塞式方法...得到输出流对象,输出数据 调用Socket对象的close()方法,关闭socket 调用ServerSocket对象的close()方法,关闭ServerSocket 服务端的accept()方法,是阻塞式方法...,会在这里等待客户端的连接 Server.java import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress...; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket...InputStream in=socket.getInputStream(); byte[] b=new byte[1024]; int len=in.read(b);//这里会阻塞

1.3K30
领券