2012-05-23 167 views
0

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

+0

答案是否定的,除非你使用'synchronized'关键字。阅读[在这里]教程(http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html)。 –

回答

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

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

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

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