繁体   English   中英

多线程安全 class

[英]multi thread safe class

问题:

A) 使用方法 doA()、doB()、doC() 编写线程安全的 class。 这些方法中的每一个都必须报告方法名称、调用时间和调用线程名称。

B) 编写一个产生 4 个线程的多线程驱动程序,每个线程必须调用每个方法 - doA()、doB()、doC() - 10 次

我假设这意味着 doA()、doB()、doC() 必须是安全的。 但是他们都没有改变 object 中的共享 state,他们只是读取了 object Z9ED39E2EA9312586B6A985A6 等方法名称和运行时间。 那么,我需要同步每个方法吗? 对于每个线程内的计数器,它是不共享的。

我这里有点疑惑,object的state哪个需要保护?

编辑:我们是否需要一种机制来确保 doA()、doB()、doC() 的运行顺序? 我不这么认为。

从它的声音来看,您的 object 根本没有可变的 state。 没有可变 state 的对象通常(不总是,但通常)是线程安全的,没有任何额外的锁定。 当然,如果有其他要求确实暗示可变 state,答案会有所不同。

您如何报告信息? 如果是控制台或任何其他独立于线程的资源,则有您共享的“状态”。 有点。 一些写入控制台的机制会缓冲行,因此您可能不会遇到问题,但是在多行上,您必须确保两个不会同时写入。 例如,如果我要打印:

Thread: A
Method: doA
Running Time: 4.6s

然后我想确保另一个线程不会在中途开始。 否则你可能会得到这样的结果:

Thread: A
Thread: B
Method: doB
Running Time: 4.6s
Method: doA
Running Time: 3.2s

没那么有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM