![]() |
1
2
我认为这是因为你在每个threadClass对象中实例化一个新的listClass,所以当你修改列表时,你实际上是在每个线程中修改它们自己的“本地”副本。 尝试在main函数中实例化list,然后将其传递给线程,这样就有一个list类的实例由两个线程操作。
然后修改线程实现:
最后,记住将add和delete方法都作为synchronized放在listclass中,否则在并发访问方面会遇到一些问题。
你也可以看看 CopyOnWriteArrayList ,这是ArrayList的线程安全实现。然而,正如文档中所说,这通常是一个成本高昂的实现,可能不是一个适合您的问题的解决方案。 |
![]() |
2
0
在现代Java中,我们很少讨论
将你的任务定义为
至于跨线程共享列表管理器,请创建一个实例。确保列表管理器是线程安全的。您当前的实现不是线程安全的。一种解决方案是将add和delete方法都标记为
将列表管理器对象的一个实例传递给
提交你所有的申请
同样,这一切已经被多次报道。搜索以了解更多信息。 |
![]() |
3
0
你可以使用集合。synchronizedList()则无需将Synchronized添加到add/delete方法中。创建ListClass的一个实例,然后将其传递给两个线程的构造函数。
|
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 2 年前 |