`
nowing
  • 浏览: 84768 次
  • 来自: ...
社区版块
存档分类
最新评论

Java线程:阻塞栈

阅读更多
http://lavasoft.blog.51cto.com/62575/222530

对于阻塞栈,与阻塞队列相似。不同点在于栈是“后入先出”的结构,每次操作的是栈顶,而队列是“先进先出”的结构,每次操作的是队列头。

这里要特别说明一点的是,阻塞栈是Java6的新特征。、

Java为阻塞栈定义了接口:java.util.concurrent.BlockingDeque,其实现类也比较多,具体可以查看JavaAPI文档。

下面看一个简单例子:

import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;

/**
* Java线程:新特征-阻塞栈
*
* @author leizhimin 2009-11-5 15:34:29
*/
public class Test {
        public static void main(String[] args) throws InterruptedException {
                BlockingDeque bDeque = new LinkedBlockingDeque(20);
                for (int i = 0; i < 30; i++) {
                        //将指定元素添加到此阻塞栈中,如果没有可用空间,将一直等待(如果有必要)。
                        bDeque.putFirst(i);
                        System.out.println("向阻塞栈中添加了元素:" + i);
                }
                System.out.println("程序到此运行结束,即将退出----");
        }
}

输出结果:
向阻塞栈中添加了元素:0
向阻塞栈中添加了元素:1
向阻塞栈中添加了元素:2
向阻塞栈中添加了元素:3
向阻塞栈中添加了元素:4
向阻塞栈中添加了元素:5
向阻塞栈中添加了元素:6
向阻塞栈中添加了元素:7
向阻塞栈中添加了元素:8
向阻塞栈中添加了元素:9
向阻塞栈中添加了元素:10
向阻塞栈中添加了元素:11
向阻塞栈中添加了元素:12
向阻塞栈中添加了元素:13
向阻塞栈中添加了元素:14
向阻塞栈中添加了元素:15
向阻塞栈中添加了元素:16
向阻塞栈中添加了元素:17
向阻塞栈中添加了元素:18
向阻塞栈中添加了元素:19

从上面结果可以看到,程序并没结束,二是阻塞住了,原因是栈已经满了,后面追加元素的操作都被阻塞了。
分享到:
评论

相关推荐

    Java多线程编程总结

    Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 ...Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:大总结

    java线程详解

    Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:深入ThreadLocal 一、标准例子 二、不用ThreadLocal 三、自己实现个ThreadLocal 四、透过...

    Java多线程编程经验

    #### 十八、Java线程:新特征-阻塞栈 阻塞栈是一种特殊的数据结构,与阻塞队列类似,当栈为空时,出栈操作会被阻塞;当栈满时,入栈操作会被阻塞。 #### 十九、Java线程:新特征-条件变量 条件变量是 `java.util....

    Java 线程开发讲座

    #### 十六、Java线程:新特征-阻塞栈 - **阻塞栈**:栈在入栈或出栈操作时会自动阻塞,直到栈可用。 - **实现类**:`SynchronousQueue`提供了一个特殊的阻塞队列实现。 以上是基于给定文件的Java线程开发讲座的...

    Java多线程

    #### 十八、Java线程:新特征-阻塞栈 阻塞栈是阻塞队列的一种变体,它遵循后进先出(LIFO)原则。 #### 十九、Java线程:新特征-条件变量 条件变量允许线程等待某个条件成立后再继续执行,是实现高级同步控制的...

    java多线程编程总结

    Java线程的状态包括新建 (`NEW`)、就绪 (`RUNNABLE`)、阻塞 (`BLOCKED`)、等待 (`WAITING`)、超时等待 (`TIMED_WAITING`) 和终止 (`TERMINATED`)。 #### 五、Java线程:线程的同步与锁 - **线程同步** 线程同步...

    JAVA多线程

    #### Java线程:线程栈模型与线程的变量 每个线程都有自己的执行栈,即线程栈,用于存储线程的局部变量和方法调用信息。线程栈随着线程的创建而创建,随着线程的结束而销毁。线程栈的大小可以在创建线程时指定。...

    JAVA多线程总结

    **三、Java线程:线程栈模型与线程的变量** 每个线程有自己的调用栈,用于存储方法调用的状态。线程间的局部变量互不影响,但共享同一块内存区域(包括全局变量、静态变量)。 **四、Java线程:线程状态的转换** ...

    Java多线程运算集合

    #### 十四、Java线程:新特征-阻塞队列与阻塞栈 - **阻塞队列**: - `BlockingQueue` 是一种特殊类型的队列,它提供了额外的阻塞行为。 - 当队列为空时,从队列中取元素的操作将会阻塞;当队列满时,往队列里添加...

    java线程文档大全

    14. **阻塞队列(Blocking Queue)和阻塞栈(Blocking Stack)**:Java并发包中的LinkedBlockingQueue和ArrayBlockingQueue是典型的阻塞队列实现,它们在插入和移除元素时能自动处理线程阻塞。Deque接口的实现如...

    Java线程详解大全

    Java线程是并发编程的核心部分,它允许程序在同一时间执行多个独立的任务,从而提高系统效率和响应速度。本文将深入探讨Java线程的概念、生命周期、实现方式以及相关的同步机制。 首先,理解线程的基本概念至关重要...

    Java线程使用教程

    4. **线程状态**:Java线程有新建、就绪、运行、阻塞和死亡五种状态,可以通过`getState()`获取。 三、线程池与Executor框架 1. **ExecutorService**:Java 5引入了`ExecutorService`接口,它是线程池的抽象,通过...

    java线程与并发编程实践

    首先,Java线程是程序执行的独立路径,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈,共享堆内存。Java提供两种方式创建线程:继承Thread类或实现Runnable接口。继承Thread类可以直接重写run()方法,而实现...

    IBM java线程堆栈分析工具

    总之,IBM的jca467.jar是WAS环境下进行Java线程分析的强大工具,它能够帮助开发者深入洞察应用程序的内部运行情况,有效地定位和解决多线程问题,提升系统的稳定性和性能。通过熟练掌握并运用这个工具,开发者可以在...

    输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程

    总之,jstack是一个非常强大的工具,通过它可以有效诊断和解决Java程序中的线程相关问题,例如线程阻塞或死锁。熟练掌握jstack的使用对于任何Java应用程序的性能优化和问题解决都有着重要作用。

    Java线程PDF

    ### Java线程知识点详解 #### 一、Java线程概览 - **定义**: Java线程是Java语言中实现多线程编程的核心概念之一。它允许开发者在一个进程中创建多个独立执行的路径,这些路径可以并发运行,从而提高程序的效率和...

    Java线程详解.ppt

    Java线程是并发编程的核心部分,它允许程序在同一时间执行多个任务,从而提高了系统的效率和资源利用率。在Java中,线程是通过`Thread`类或者实现`Runnable`接口来创建和管理的。 首先,我们要理解进程和线程的概念...

    java 多线程并发实例

    线程是程序执行的基本单元,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈,而共享堆内存。在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。在提供的实例中,我们可能会看到这两种方式的...

Global site tag (gtag.js) - Google Analytics