我有一个网络应用程序,它使用了我编写的一些jar。
我的挑战是我的代码中有一个关键(但很快)的部分。

1-我有给定类的对象,该对象具有几个static字段。我们称这个班为A类

2 _ A公开了访问static字段的非静态方法。阅读和写作。让我们将此方法称为doJob

3-每个请求都实例化类A的对象并调用doJob
A a = new A(); a.doJob();

4-我假设每个请求都在执行Thread的情况下创建一个新的doJob

5-如果将doJob定义为public synchronized void doJob () {//Do the job},则一次仅一个Thread将执行该方法,其他的将继续等待。

问题是:我在说什么好吗?

最佳答案

没错,但是doJob将在实例级别同步,因此可以在两个或更多个类A的两个实例上同时由两个或多个不同的线程同时执行doJob方法。如果您希望doJob仅由一个线程在以下位置执行时间(例如,因为它破坏了静态字段),您应该将其声明为静态,或者使用静态字段作为锁定对象来同步整个方法主体。

关于java - Java线程和同步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10825138/

10-09 18:28