2012-05-23 2 views
0

스레드와 동시에 같은 기능을 실행할 수 있습니다. 의심의 여지가 자바 메서드 영역에서 동일한 함수에 여러 호출을 기다리고 상태로 이어질 수 있습니다, 그래서 내가 맞습니까?같은 기능의 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

엡를 demostrate합니다. 기본적으로 메소드의 동시 실행을 수행 할 수 있습니다. 동시 실행을 중지하려면 동기화 된 키워드 또는 동시성 클래스를 사용해야합니다.

1

예, 동일한 함수를 여러 스레드에서 동시에 호출 할 수 있습니다. 각 쓰레드는 자신 만의 스택을 가지고 있습니다. 즉, 함수에 사용 된 로컬 변수의 복사본을 얻습니다.

멀티 코어 머신에서 스레드는 동일한 기능으로 동시에 실행될 수도 있습니다.

물론 동일한 함수를 여러 스레드에서 동시에 호출하면 동일한 가변 상태 (예 : 두 스레드가 읽고 쓰는 객체의 필드)에 액세스하는 경우 문제가 발생할 수 있습니다. 이러한 문제로부터 보호하려면 잠금 또는 동기화의 일부 형식을 사용해야합니다.