【发布时间】:2020-11-17 01:28:55
【问题描述】:
我有一个应用程序,在我的实现中我需要一些信号量。我的问题是这如何与 ArrayList 一起使用?
假设我有一个包含多个信号量的ArrayList<Semaphore> semList;,如果我执行 semList.get(0).aquire();信号量是否会在列表中相应更新 - 换句话说,其他线程会知道它已被获取吗?我不确定,因为 ArrayList.get() 只获得对对象的引用。
【问题讨论】:
-
作为对象的变量总是对对象的引用。
-
@NathanHughes 你对解决方案有什么建议吗?
-
Vector是线程安全的,CopyOnWriteArrayList也是如此。 -
@Turing85 我已经查看了 CopyOnWriteArrayList,但我打算在这里使用信号量。当下一个线程从列表中获取时,不需要获取获取的信号量还是我错了?
-
Re,“这将像我打算在这里那样与信号量一起工作吗?”
CopyOnWriteArrayList或Vector或任何其他类型的容器的工作方式完全独立于您放入容器中的内容。同样,Semaphore的工作方式与您碰巧在哪里找到它的引用完全无关。
标签: java multithreading arraylist concurrency semaphore