【问题标题】:Can be executed same method of same object at same time in defferent threads?可以在不同线程中同时执行同一对象的相同方法吗?
【发布时间】:2014-03-08 19:39:05
【问题描述】:

寻找解决方案以及时识别具体的方法执行。不理解方法的名称,而是具体的方法执行。例如,如果可能的话,如果可能的话,同时在两个线程中对相同方法的相同对象进行递归调用。

【问题讨论】:

  • 是的,这是可能的。如果你不想这样,请使用 synchronized 方法。

标签: java multithreading reflection aop aspectj


【解决方案1】:

可以同时从不同线程调用静态方法以及实例的方法。

尽管您是否应该注意竞争条件以及由访问和修改对象引起的一般问题,这些对象在这些线程之间共享(通常是所有静态对象以及实例成员,如果两个线程使用同一个类的实例)

使用以下代码可以同步访问共享的对象

public class Calculator {
    private int c;

    public void increment() {
        synchronized(c) {
            c++;
        }
    }
}

更多信息:http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

使用以下代码可以同步访问共享的方法

public synchronized void increment() {
        c++;
    }

更多信息:http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html

ReadWriteLock 是更高级的东西,可以让您获得更好的性能,但您现在不需要它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多