[英]Is execution of static method of a class in multi-threaded program thread safe?
[英]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.