我有一个网络应用程序,它使用了我编写的一些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/