>  기사  >  Java  >  Java 멀티스레딩이란 무엇입니까?

Java 멀티스레딩이란 무엇입니까?

(*-*)浩
(*-*)浩원래의
2019-05-05 11:52:3414510검색

이 글에서는 멀티스레딩과 그 예를 소개합니다.

Java 멀티스레딩이란 무엇입니까?

Java 프로그램은 모두 JVM(Java Virtual Machine)에서 실행되며, 프로그램의 멀티태스킹은 스레드를 통해 구현됩니다. java 명령으로 Java 애플리케이션이 시작될 때마다 JVM 프로세스가 시작됩니다. 동일한 JVM 프로세스에는 프로세스 자체가 하나만 있습니다. 이 JVM 환경에서는 모든 프로그램 코드가 스레드에서 실행됩니다.

일반적으로 일반적인 Java 애플리케이션은 단일 스레드입니다. 예를 들어, java 명령을 사용하여 가장 간단한 HelloWorld Java 애플리케이션을 실행하면 JVM 프로세스가 시작됩니다. 프로세스가 진행되면 JVM은 프로그램의 진입점 main()을 찾은 다음 main() 메서드를 실행하여 메인 스레드라고 하는 스레드를 생성합니다. 메인 메소드가 종료되면 메인 스레드가 완료됩니다. JVM 프로세스도 즉시 종료됩니다.

프로세스에 여러 스레드가 있는 경우 여러 스레드가 프로세스의 메모리 블록을 공유합니다. 새 스레드가 생성되면 운영 체제는 새 메모리를 할당하지 않지만 새 스레드가 메모리를 공유하도록 허용합니다. 원래 프로세스 블록의 따라서 스레드 간의 통신이 쉽고 빠릅니다. 서로 다른 프로세스가 서로 다른 메모리 블록에 있기 때문에 프로세스 간의 통신이 상대적으로 어렵습니다.

추천 과정: JavaTutorial

프로세스 는 메모리에서 실행되는 애플리케이션을 의미하며, 각 프로세스에는 해당 프로세스가 있습니다. 독립적인 메모리 공간을 가지며 하나의 프로세스에서 여러 스레드를 시작할 수 있습니다. 예를 들어 Windows 시스템에서 실행 중인 exe는 프로세스입니다.

Thread은 프로세스의 실행 흐름을 나타내며, 프로세스는 여러 스레드를 실행할 수 있습니다. 예를 들어 java.exe 프로세스는 많은 스레드를 실행할 수 있습니다. 스레드는 항상 프로세스에 들어가며 프로세스의 여러 스레드는 프로세스의 메모리를 공유합니다.

Multi-threading은 이 프로그램(프로세스)이 실행 중일 때 둘 이상의 스레드를 생성한다는 사실을 나타냅니다.

#🎜🎜 #Instance#🎜🎜 #Thread 1: 다음으로 Runnable을 구현하는 방법을 사용하여 멀티스레딩을 구현합니다.

public class TestRunnable implements Runnable {

    private int time=1;
    private SourceA s;
    private String id = "001";
    public TestRunnable(SourceA s){
        this.s = s;
    }
    public void setTime(int time) {
        this.time = time;
    }
    
    @Override
    public void run() {
        try {
            System.out.println("i will sleep"+ time);
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        synchronized(s){
            s.notify();
            System.out.println("我唤醒了002!");
            System.out.println("我存入了id"+id);
            s.setSource(id);
        }
    }

}

Thread 2: 다음으로 상속 Thread를 사용하여 멀티스레딩을 구현합니다.

public class TestThread extends Thread {
    private int time = 1;
    private SourceA s = null;
    String id = "002";
    
    public void setTime(int time) {
        this.time = time;
    }
    
    public TestThread(SourceA s){
        this.s = s ;
    }
    
    @Override
    public void run() {
        try {
            System.out.println("i will sleep"+ time);
            sleep(time);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        synchronized(s){
            try {
                System.out.println("我"+ id +"要进行等待了");
                s.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("我被唤醒了");
            System.out.println("我存入了id"+id);
            s.setSource(id);
        }
    }

}

스레드를 동기화하는 클래스에는 get 및 set 메소드가 있습니다.

public class SourceA {
    private List<String> list = new ArrayList<String>();
    public synchronized void getSource(){
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }
    public synchronized void setSource(String id){
        list.add(id);
    }
}

멀티 스레드 결과를 콘솔에 인쇄하는 테스트 클래스입니다.

public void test(){
        SourceA s = new SourceA();
        TestThread tt = new TestThread(s);
        TestRunnable tr = new TestRunnable(s);
        Thread t = new Thread(tr);
        System.out.println("调用线程1");
        tt.start();
        System.out.println("调用线程2");
        t.start();
    }

위 내용은 Java 멀티스레딩이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.