相关疑难解决方法(0)

LinkedBlockingQueue vs ConcurrentLinkedQueue

我的问题涉及前面提到的这个问题.在我使用队列进行生产者和消费者线程之间的通信的情况下,人们通常会建议使用LinkedBlockingQueueConcurrentLinkedQueue

使用一个优于另一个的优点/缺点是什么?

从API的角度来看,我可以看到的主要区别是a LinkedBlockingQueue可以选择性地限制.

java queue concurrency multithreading data-structures

104
推荐指数
3
解决办法
5万
查看次数

java.util.ConcurrentLinkedQueue

我想使用java.util.ConcurrentLinkedQueue作为Servlet的非持久队列.这是来自类的javadoc的模糊.

基于链接节点的无界线程安全队列.当许多线程共享对公共集合的访问时,ConcurrentLinkedQueue是一个合适的选择.此队列不允许null元素.

现在假设我在servlet上有1000个并发请求,每个线程都需要将一个对象嵌入到ConcurrentLinkedQueue中.从描述中,我应该得出结论,处理负载没有问题吗?我需要的保证是:

  1. 我自动收到线程安全保证,而无需自己进行同步.
  2. 如果流量负载超过1000个并发请求,我将不会丢失任何请求.

谢谢

java queue concurrency tomcat servlets

16
推荐指数
1
解决办法
1万
查看次数

Java同时生成无限量的对象

所以我需要制作一个电梯模拟器,我想知道如何不断地让人们打电话给电梯.我需要这个永远继续下去.所以基本上创建一个人并呼叫电梯.所有这些电话都被跟踪,但我想我需要跟踪实际上在电梯上的人.

我有几个班Person,Elevator,ElevatorCallElevatorCallQueue.

  1. 在Person中,我有一个run()方法,它基本上使用当前楼层和目的地楼层进行电梯呼叫,然后我有一个BlockingQueue我打电话的方法.这个run方法只运行true.

  2. ElevatorCall我只有收集和目的地楼层的gettersetter

  3. 在ElevatorCallQueue中,我有MAX_CALLS和numberOfPeople的变量.我有一个BlockingQueue<ElevatorCall> queue = new ArrayBlockingQueue<ElevatorCall>(MAX_CALLS) 和一个List<Person> 我在列表中添加人员,我浏览列表并run()在每个人上启动方法.最后,我创建了一个电梯并提供队列,然后运行它.

  4. 在电梯我有BlockingQueue<ElevatorCalls>.我在while(true这里也有a ),在里面我做了一个ArrayList<ElevatorCall>然后我使用了ArrayList<ElevatorCalls>作为参数的BlockingQueues drainTo方法.该run()方法的其余部分基本上遍历数组列表并执行电梯所做的事情,因此它转到第一个按下的按钮,检查每个楼层的人员以及它是否是目的地楼层.

现在我已经卡住了,不知道从哪里开始.我需要一些人们如何连续添加并呼叫电梯,并且如果没有更多呼叫,让电梯等待.如果有人能帮助我朝着正确的方向前进,我将不胜感激.谢谢

编辑

这是电梯类的代码,因为有人说我应该发布一些代码.但是我不确定要发布什么代码,所以我想我只是放入整个班级

java concurrency multithreading wait

9
推荐指数
1
解决办法
571
查看次数

Java:在原始线程的上下文中从另一个线程调用回调

我有点羞于问这个基本问题,但就是这样。

假设我有一个主类和一个工作线程。工作线程执行一些异步工作并将结果返回到主类的回调。

现在我正在努力解决的是:主类的回调作为工作线程的一部分执行。我已经这样做了十几次,它从未对我造成任何问题,但我想知道如何优雅地将响应从工作线程传递回实际的主线程。

我知道我可以使用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)

java multithreading thread-safety

5
推荐指数
1
解决办法
2936
查看次数

Java:哪个对象更合适?

我正在编写类似于聊天服务器 - 客户端对的应用程序.

我计划有一个中心对象,它将保存从客户端收到的新消息,直到主线程处理它们为止.

我的应用程序是多线程的.每个客户端都在自己的线程上,因此多个线程将向此中心对象添加消息.

主线程将检查此对象的消息,删除"最旧的"并适当地处理它.我希望消息的处理顺序与它们相同(FIFO).

什么类型的Object最适合保存新消息?我查看了Vectors和ArrayLists,但我对同步方面感到困惑.我以前从未使用同步或线程.

谢谢

java multithreading synchronization vector arraylist

2
推荐指数
1
解决办法
173
查看次数

如何在两个无限循环线程之间共享单个列表?

我有数据结构(即队列,堆栈或列表).存在无限循环(在线程1中)将对象插入到该数据结构中,并且存在另一个无限循环(在线程2中),其从该数据结构获取对象并对其进行一些处理.我不希望处理循环阻止插入循环.

如何在Java中正确执行此操作,在两个线程之间共享单个数据结构,同步和两个不同线程的并发读/写?我可以使用java并发API(java 7)中的数据结构吗?有什么建议可以解决这个问题吗?

java concurrency multithreading

0
推荐指数
1
解决办法
77
查看次数