❶ java中的队列都有哪些,有什么区别
阻塞队列、普通队列,非阻塞队列。
阻塞队列与普通队列的而区别在于,当队列是空时,从队列中获取元素的操作会被阻塞,或则当队列是满的时,往队列中增加元素会被阻塞,试图从空的队列中取元素的线程或从满的队列中添加元素的线程同样会被阻塞。
❷ Java队列问题
题目描述不是特别清晰
List<String> list1; //size>0
List<String> list2 = new ArrayList<String>();
//如果不想改变原有队列,则new出新的Obj 并使他们的值一样
String a = list1.get(index); //index 为你需要的下标
String b=new String(a);
list2.add(b);
❸ java有没有循环队列 线程安全
jdk没有线程安全的循环队列,
ConcurrentLinkedQueue是线程安全非阻塞的队列
❹ java中如何对某个方法或者某个代码块使用阻塞队列来保证并发情况下线程是安全的
synchronize加在函数方法或者代码块,就能按你说的保证线程安全,原理是多线程进入时候系统会只允许一个线程执行那些语句
❺ java哪个队列能保证数据的唯一性
HashSet 保证元素唯一性的方法
自己的理解:当HashSet中放入了两个对象后,默认他们的hashCode都是不一样的,因此不需要调用equals方法就能确定这两个对象不是同一个,但是如果这两个对象的值是一样的,这种判断结果就不符合要求了,因此需要重写hashcode方法,将两个对象的hashcode值设为相同,这样就可以进入equals判断阶段,equals方法是继承自object类的,比较的是对象的地址值,所以判断的结果也必定不同,这又不符合要求了,因此也需要重写equals方法。经过改写以上两个方法,可以完成两个对象的比较,只要两个对象的内容(值)相同,就判断为同一个对象,不得重复存储。哈希表就像一个个桶,每个桶都有一个hashcode,只要元素的hashcode相同,equals如果为false,那么这些元素都挂在这个桶里。
另外,判断是否包含某元素(contains),list和set也是不同的:
ArrayList:判断包含,以及删除,都是依据元素的equals方法。
HashSet:判断包含,以及删除,都是依据元素的hashCode方法。当hashCode值相同时,在判断一次equals方法。
❻ java为什么要使用队列
让我来告诉你答案!你指的是JMS么???选用他的一个好处就是:它可以把不影响用户执行结果又比较耗时的任务(比如发邮件通知管理员)异步的扔给JMS服务端去做,而尽快的把屏幕返还给用户。服务端能够多线程排队响应高并发的请求,并保证请求不丢失。还有一种是被动型的:比如两个平台之间交互的时候对方决定使用JMS队列,那你也只能跟着他用这个列队来处理信息流。它允许多线程将信息放入队列,也能多线程消费。以统一的格式发送请求:例如JSON
❼ java 如何实现一个线程安全的队列
以下是两个线程:
import java.util.*;
public class Thread_List_Operation {
//假设有这么一个队列
static List list = new LinkedList();
public static void main(String[] args) {
Thread t;
t = new Thread(new T1());
t.start();
t = new Thread(new T2());
t.start();
}
}
//线程T1,用来给list添加新元素
class T1 implements Runnable{
void getElemt(Object o){
Thread_List_Operation.list.add(o);
System.out.println(Thread.currentThread().getName() + "为队列添加了一个元素");
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
getElemt(new Integer(1));
}
}
}
//线程T2,用来给list添加新元素
class T2 implements Runnable{
void getElemt(Object o){
Thread_List_Operation.list.add(o);
System.out.println(Thread.currentThread().getName() + "为队列添加了一个元素");
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
getElemt(new Integer(1));
}
}
}
//结果(乱序)
Thread-0为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
❽ java 队列
我说一种情况吧。队列可以用于数据缓冲,比如你一个线程接收数据,这个数据可能会一段时间来的非常迅猛,一段时间又来的比较温和,这个时候你就可以做一个队列,一个线程把接收的数据存放到队列,另外的线程慢慢处理数据,在数据来的迅猛的时候,因为有队列的缓冲,你处理数据的线程就算处理不过,也不会直接导致系统崩溃,等数据来的温和的时候,就可以慢慢的消化之前在队列来不及处理的数据。
❾ java队列
非阻塞队列和普通队列 对于阻塞队列来说都是一种队列
再就是阻塞队列和非阻塞的区别:
阻塞队列会阻塞 从空队列中的取值和添加元素到满队列的行为
非阻塞队列则不会 他会抛异常(也可能不抛 看底层实现)
这样一来就是 只要时间充裕 对阻塞队列的进出操作都可以实现 那多线程情况下就可以减少一部分并发问题 比如经典的 生产消费者 用非阻塞队列 必须进行一定同步 不然就可能出现空队列出队 满队列进队的 而使用阻塞队列就不会
但是如果你可以确保生成消费是有规律 或者 在允许范围出错 那你可以使用阻塞队列 来提高效率
说这么多乱七八糟的 还不是要多写 我打赌我写了这么多 你看了还是迷糊的
回去写一遍强多了