是否可以从线程同时执行相同的功能。我怀疑在java方法区域是一样的,所以对同一个函数的多次调用可能会导致等待状态,我是否正确?
答案 0 :(得分:2)
叶氏。您可以默认执行方法的并发执行。要停止并发执行,您需要使用同步关键字或并发类
答案 1 :(得分: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();
}
}
答案 2 :(得分:1)
是的,完全可以从多个线程同时调用相同的函数。每个线程都有自己的堆栈,这意味着它获得了自己在函数中使用的局部变量的副本。
在多核机器上,线程甚至可以在同一个函数中同时运行。
当然,如果从多个线程同时调用相同的函数,如果它们访问相同的可变状态(例如,两个线程都读取和写入的对象中的字段),则会导致问题。如果您想要防范这些问题,则需要使用某种形式的锁定或同步。