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

Java线程阻塞

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

1.1K10

Java阻塞队列

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

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

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

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

    5.5K31

    accept 函数_accept函数阻塞的吗

    在套接字上使用重叠I/O接受连接的惟一API就是AcceptEx()函数【注一】。...有趣的是,通常的同步接受函数accept()的返回值是一个新的套接字,而AcceptEx()函数则需要另外一个套接字作为它的参数之一。...要预防此类攻击,接受连接的线程应该不时地通过调用getsockopt()函数(选项参数为SO_CONNECT_TIME)来检查AcceptEx()里守候的套接字。...getsockopt()函数的选项值将被设置为套接字被连接的时间,或者设置为-1(代表套接字尚未建立连接)。这时,WSAEventSelect()的特性就可以很好地利用来做这种检查。...发出AcceptEx()调用的线程,似乎与那个进行完成端口关联操作、处理其它I/O完成通知的线程是同一个,但是,别忘记线程里应该尽力避免执行阻塞型的操作。

    1.2K20

    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

    1K40

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

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

    1K120

    UDP服务recvfrom函数设置非阻塞

    本文先介绍我查看了的2篇文章,然后介绍linux 和windows 下的非阻塞设置。最后是非阻塞情况下接收情况的判断。...2篇博文 其实UDP的非阻塞也可以理解成和TCP是一样的,都是通过socket的属性去做。 方法一:通过fcntl函数将套接字设置为非阻塞模式。...、recvfrom的表现 https://blog.csdn.net/lp525110627/article/details/79742898 非阻塞设置 在linux 下用fcntl 函数 //设置非阻塞...看看函数说明 定义函数:int recvfrom(int s, void *buf, int len, unsigned int flags, struct sockaddr *from,int *fromlen...); 函数说明:recvfrom()用来接收远程主机经指定的socket 传来的数据, 并把数据存到由参数buf 指向的内存空间, 参数len 为可接收数据的最大长度.

    2.2K30

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

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

    94020

    java中的阻塞队列

    阻塞队列 阻塞队列 什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。...移除方法,则是从队列里拿出一个元素,如果没有则返回null ·一直阻塞:当阻塞队列满时,如果生产者线程往队列里put元素,队列会一直阻塞生产者线程,直到拿到数据,或者响应中断退出。...当队列空时,消费者线程试图从队列里take元素,队列也会阻塞消费者线程,直到队列可用。 ·超时退出:当阻塞队列满时,队列会阻塞生产者线程一段时间,如果超过一定的时间,生产者线程就会退出。...默认情况下不保证访问者公平的访问队列, 所谓公平访问队列是指阻塞的所有生产者线程或消费者线程,当队列可用时,可以按照阻塞的先后顺序访问队列,即先阻塞的生产者线程,可以先往队列里插入元素,先阻塞的消费者线程...TimeUnit unit) { return unit.convert(time - now(), TimeUnit.NANOSECONDS); } 通过构造函数可以看出延迟时间参数

    87720

    Java中的阻塞队列

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

    89360

    Java并发阻塞队列之ArrayBlockingQueue

    JUC简介 在 Java 5.0 提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,用于定义类似于线程的自定义子系统,包括线程池,异步IO和轻量级任务框架...阻塞队列,是指多线程访问竞争资源时,当竞争资源已被某线程获取时,其它要获取该资源的线程需要阻塞等待; ArrayBlockingQueue是按FIFO(先进先出)原则对元素进行排序,元素都是从尾部插入到队列...String toString() 源代码分析 构造函数 ArrayBlockingQueue提供了三个构造函数。...构造函数中this.items对应的代码为: /** The queued items */ final Object[] items; 这是存储阻塞队列数据的数组。...package com.secbro2.juc; import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; /*

    39420
    领券