我的问题涉及前面提到的这个问题.在我使用队列进行生产者和消费者线程之间的通信的情况下,人们通常会建议使用LinkedBlockingQueue或ConcurrentLinkedQueue?
使用一个优于另一个的优点/缺点是什么?
从API的角度来看,我可以看到的主要区别是a LinkedBlockingQueue可以选择性地限制.
我想使用java.util.ConcurrentLinkedQueue作为Servlet的非持久队列.这是来自类的javadoc的模糊.
基于链接节点的无界线程安全队列.当许多线程共享对公共集合的访问时,ConcurrentLinkedQueue是一个合适的选择.此队列不允许null元素.
现在假设我在servlet上有1000个并发请求,每个线程都需要将一个对象嵌入到ConcurrentLinkedQueue中.从描述中,我应该得出结论,处理负载没有问题吗?我需要的保证是:
谢谢
所以我需要制作一个电梯模拟器,我想知道如何不断地让人们打电话给电梯.我需要这个永远继续下去.所以基本上创建一个人并呼叫电梯.所有这些电话都被跟踪,但我想我需要跟踪实际上在电梯上的人.
我有几个班Person,Elevator,ElevatorCall和ElevatorCallQueue.
在Person中,我有一个run()方法,它基本上使用当前楼层和目的地楼层进行电梯呼叫,然后我有一个BlockingQueue我打电话的方法.这个run方法只运行true.
在ElevatorCall我只有收集和目的地楼层的getter和setter
在ElevatorCallQueue中,我有MAX_CALLS和numberOfPeople的变量.我有一个BlockingQueue<ElevatorCall> queue = new ArrayBlockingQueue<ElevatorCall>(MAX_CALLS)
和一个List<Person>
我在列表中添加人员,我浏览列表并run()在每个人上启动方法.最后,我创建了一个电梯并提供队列,然后运行它.
在电梯我有BlockingQueue<ElevatorCalls>.我在while(true这里也有a ),在里面我做了一个ArrayList<ElevatorCall>然后我使用了ArrayList<ElevatorCalls>作为参数的BlockingQueues drainTo方法.该run()方法的其余部分基本上遍历数组列表并执行电梯所做的事情,因此它转到第一个按下的按钮,检查每个楼层的人员以及它是否是目的地楼层.
现在我已经卡住了,不知道从哪里开始.我需要一些人们如何连续添加并呼叫电梯,并且如果没有更多呼叫,让电梯等待.如果有人能帮助我朝着正确的方向前进,我将不胜感激.谢谢
编辑
这是电梯类的代码,因为有人说我应该发布一些代码.但是我不确定要发布什么代码,所以我想我只是放入整个班级
我有点羞于问这个基本问题,但就是这样。
假设我有一个主类和一个工作线程。工作线程执行一些异步工作并将结果返回到主类的回调。
现在我正在努力解决的是:主类的回调作为工作线程的一部分执行。我已经这样做了十几次,它从未对我造成任何问题,但我想知道如何优雅地将响应从工作线程传递回实际的主线程。
我知道我可以使用Future等等FutureTask,但对我来说感觉很笨重。
例子:
class ThreadTest {
private Runnable mRunnable;
public ThreadTest() {
System.out.println("ThreadTest(): thread " + Thread.currentThread().getId());
mRunnable = new Runnable() {
public void run() {
System.out.println("run(): thread " + Thread.currentThread().getId());
print();
}
};
new Thread(mRunnable).start();
}
private void print() {
System.out.println("print(): thread " + Thread.currentThread().getId());
}
public static void main(String... args) {
System.out.println("main(): thread " + Thread.currentThread().getId());
ThreadTest t = new ThreadTest();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
main(): thread 1
ThreadTest(): thread 1
run(): thread …Run Code Online (Sandbox Code Playgroud) 我正在编写类似于聊天服务器 - 客户端对的应用程序.
我计划有一个中心对象,它将保存从客户端收到的新消息,直到主线程处理它们为止.
我的应用程序是多线程的.每个客户端都在自己的线程上,因此多个线程将向此中心对象添加消息.
主线程将检查此对象的消息,删除"最旧的"并适当地处理它.我希望消息的处理顺序与它们相同(FIFO).
什么类型的Object最适合保存新消息?我查看了Vectors和ArrayLists,但我对同步方面感到困惑.我以前从未使用同步或线程.
谢谢
我有数据结构(即队列,堆栈或列表).存在无限循环(在线程1中)将对象插入到该数据结构中,并且存在另一个无限循环(在线程2中),其从该数据结构获取对象并对其进行一些处理.我不希望处理循环阻止插入循环.
如何在Java中正确执行此操作,在两个线程之间共享单个数据结构,同步和两个不同线程的并发读/写?我可以使用java并发API(java 7)中的数据结构吗?有什么建议可以解决这个问题吗?