「java链接队列」请求队列 Java
本篇文章给大家谈谈java链接队列,以及请求队列 Java对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
用java连接MQ时,如何获得某一个队列管
我用的方法是:
MQQueueManager qMgr = new MQQueueManager("BVMTEST");
System.out.println("queue manager is connected!");
int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;
/* 打开队列 */
com.ibm.mq.MQQueue queue = qMgr.accessQueue("test1", openOptions);
然后在调用queue.getCurrentDepth()的方法的时候居然报了异常:
MQJE001: 完成代码是 2,原因为 2038
如果我不在此处调用这个方法,而在后面进行
queue.put(outMsg, new MQPutMessageOptions());方法,居然可以成功放入测试信息.
给你一个有用的代码大全:
密码:exn4
北大青鸟java培训:Java并发编程常用的类和集合?
AtomicInteger可以用原子方式更新int值。
类AtomicBoolean、AtomicInteger、AtomicLong和AtomicReference的实例各自提供对相应类型单个变量的访问和更新。
java课程培训机构认为基本的原理都是使用CAS操作:booleancompareAndSet(expectedValue,updateValue);如果此方法(在不同的类间参数类型也不同)当前保持expectedValue,则以原子方式将变量设置为updateValue,并在成功时报告true。
循环CAS,参考AtomicInteger中的实现:publicfinalintgetAndIncrement(){ for(;;){ intcurrent=get(); intnext=current+1; if(compareAndSet(current,next)) returncurrent; } } publicfinalbooleancompareAndSet(intexpect,intupdate){ returnunsafe.compareAndSwapInt(this,valueOffset,expect,update); }ABA问题因为CAS需要在操作值的时候检查下值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。
ABA问题的解决思路就是使用版本号。
在变量前面追加上版本号,每次变量更新的时候把版本号加一,那么A-B-A就会变成1A-2B-3A。
从Java1.5开始JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。
这个类的compareAndSet方法作用是首先检查当前引用是否等于预期引用,并且当前标志是否等于预期标志,如果全部相等,则以原子方式将该引用和该标志的值设置为给定的更新值。
ArrayBlockingQueue一个由数组支持的有界阻塞队列。
此队列按FIFO(先进先出)原则对元素进行排序。
队列的头部是在队列中存在时间最长的元素。
队列的尾部是在队列中存在时间最短的元素。
新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素。
这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的元素。
一旦创建了这样的缓存区,就不能再增加其容量。
试图向已满队列中放入元素会导致操作受阻塞;试图从空队列中提取元素将导致类似阻塞。
此类支持对等待的生产者线程和使用者线程进行排序的可选公平策略。
默认情况下,不保证是这种排序。
然而,通过将公平性(fairness)设置为true而构造的队列允许按照FIFO顺序访问线程。
公平性通常会降低吞吐量,但也减少了可变性和避免了“不平衡性”。
LinkedBlockingQueue一个基于已链接节点的、范围任意的blockingqueue。
此队列按FIFO(先进先出)排序元素。
队列的头部是在队列中时间最长的元素。
队列的尾部是在队列中时间最短的元素。
新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。
链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。
可选的容量范围构造方法参数作为防止队列过度扩展的一种方法。
如果未指定容量,则它等于Integer.MAX_VALUE。
除非插入节点会使队列超出容量,否则每次插入后会动态地创建链接节点。
如果构造一个LinkedBlockingQueue对象,而没有指定其容量大小,LinkedBlockingQueue会默认一个类似无限大小的容量(Integer.MAX_VALUE),这样的话,如果生产者的速度一旦大于消费者的速度,也许还没有等到队列满阻塞产生,系统内存就有可能已被消耗殆尽了。
求用Java的LinkedList类创建一个链队列(LinkedQueue)类
LinkedQueue类代码:
import java.util.LinkedList;
public class LinkedQueue {
private LinkedList list;
private LinkedQueue() {
}
public LinkedQueue(LinkedList list) {
this.list = list;
}
//入队
public void add(Object obj) {
this.list.add(obj);
}
//获取队关元素
public Object get() {
return this.list.getFirst();
}
//出队
public void next() {
this.list.removeFirst();
}
//判定为空
public boolean isEmpty() {
return this.list.isEmpty();
}
//获取当前列队长度
public int size() {
return this.list.size();
}
}
测试类代码:
import java.util.LinkedList;
public class Test {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add("no1");
list.add("2");
list.add("215");
//获取初始linkedqueue;
LinkedQueue lq = new LinkedQueue(list);
System.out.println("获取队头元素 : " + lq.get());
lq.add("add");
System.out.println("入队后队列长度:: " + lq.size());
lq.next();
System.out.println("出队队列长度 : " + lq.size());
System.out.println("出队后队头元素 : " + lq.get());
System.out.println("判定为空 : " + lq.isEmpty());
}
}
关于java链接队列和请求队列 Java的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。