0

是否可以从线程同时执行相同的功能。我怀疑在 java 方法区域是相同的,所以对同一函数的多次调用可能会导致等待状态,对吗?

4

3 回答 3

2

是的。默认情况下,您可以并发执行方法。要停止并发执行,您需要使用同步关键字或并发类

于 2012-05-23T04:57:48.067 回答
1

是的,除非您使用了同步,否则可能不会有任何等待锁定。这是默认行为,没有锁定和线程执行可以交错。

但请记住,您的线程调度程序将允许一个线程在给定时间运行。

默认情况下,在没有同步的情况下没有等待的并发访问是行为。

演示样品

public class MyThread implements Runnable {

    private MyThreadInvocation  threadInvocation    = null;

    public MyThread(MyThreadInvocation threadInvocation) {
        this.threadInvocation = threadInvocation;
    }

    @Override
    public void run() {
        System.out.println("Calling from : " + Thread.currentThread().getName());
        this.threadInvocation.printMessage();
    }
}


public class MyThreadInvocation {
    public void printMessage(){
        System.out.println("Hello");
    }

    public static void main(String[] args) {
        MyThreadInvocation myThreadInvocation = new MyThreadInvocation();
        Thread t1 = new Thread(new MyThread(myThreadInvocation));
        t1.setName("First Thread");

        Thread t2 = new Thread(new MyThread(myThreadInvocation));
        t2.setName("Second Thread");

        Thread t3 = new Thread(new MyThread(myThreadInvocation));
        t3.setName("Third Thread");

        t1.start();
        t2.start();
        t3.start();
    }
}
于 2012-05-23T04:57:45.533 回答
1

是的,完全有可能从多个线程同时调用相同的函数。每个线程都有自己的堆栈,这意味着它获得了自己的函数中使用的局部变量的副本。

在多核机器上,线程甚至可以在同一个函数中同时运行。

当然,如果多个线程同时访问相同的可变状态(例如,对象中两个线程都可以读取和写入的字段),则它们会同时调用相同的函数会导致问题。如果您想防止这些问题,您将需要使用某种形式的锁定或同步。

于 2012-05-23T05:04:31.277 回答