从java中的线程调用静态函数?

Jer*_*emy 1 java multithreading

可以说我在Java中有这样的类:

public class Function {
    public static int foo(int n) {
        return n+1;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我从一个线程调用这样的foo方法会发生什么?

x = Function.foo(y);
Run Code Online (Sandbox Code Playgroud)

我可以用两个线程做到这一点,没有它们互相等待吗?假设foo需要一段时间,并且它被调用很多,因此每个线程可能会尝试同时使用foo.他们可以这样做,还是我必须在Function实例方法中创建所有方法并为每个线程提供它自己的Function对象?

Chi*_*hii 14

您调用的代码不存储任何状态,因此将确定性地返回是从一个线程还是多个线程调用 - 而不是像"代码行"那样需要保护(正如您似乎暗示您的问题),因为可以从多个线程运行"相同的代码行",前提是它们不共享数据(在这种情况下,不会).

如果您有类似代码,则会出现问题

public class Function {
    private static int last = 0;
    public static int foo(int n) {
        last += n; 
        return last; 
    }
}
Run Code Online (Sandbox Code Playgroud)

这是当你开始需要担心破坏静态的不同线程时last.