>  기사  >  Java  >  자바 - 멀티스레딩

자바 - 멀티스레딩

高洛峰
高洛峰원래의
2016-11-21 11:09:071913검색

멀티스레딩 구현 방법:

Thread 클래스 상속

Runnable 클래스 구현

---------------- - ------------------------------------------------- - -----------------

 1. Thread 클래스 상속

 Thread 클래스 상속 후 public void run( )를 스레드의 기본 메서드로 사용합니다.

모든 스레드는 동시에 실행되어야 합니다. 즉, 여러 스레드가 동일한 기간에 교대로 실행됩니다. 이 목적을 달성하려면 run() 메서드를 직접 호출해서는 안 되며, 대신 Thread 클래스의 start() 메서드를 호출하여 여러 스레드를 시작해야 합니다.

start() 메서드 호출과 run() 메서드 호출 비교:

public class MyThread extends Thread {
    private String name;
    public MyThread(String name) {
        this.name = name;
    }
    
    @Override
    public void run() {
        for(int i=0; i<10; i++) {
        System.out.println(name + "打印:" + i);
        }
    }
    
    public static void main(String[] args) {
        MyThread mt1 = new MyThread("线程A");
        MyThread mt2 = new MyThread("线程B");
        MyThread mt3 = new MyThread("线程C");
        mt1.start();
        mt2.start();
        mt3.start();
    }
}

실행 결과: (3개의 스레드가 동시에 교대로 실행되며 고정된 실행 순서는 없습니다)

자바 - 멀티스레딩

public class MyThread extends Thread {
    private String name;
    public MyThread(String name) {
        this.name = name;
    }
    
    @Override
    public void run() {
        for(int i=0; i<5; i++) {
        System.out.println(name + "打印:" + i);
        }
    }
    
    public static void main(String[] args) {
        MyThread mt1 = new MyThread("线程A");
        MyThread mt2 = new MyThread("线程B");
        MyThread mt3 = new MyThread("线程C");
        mt1.run();
        mt2.run();
        mt3.run();
    }
}

실행 결과: (3개의 프로그램이 순차적으로 실행됨)

자바 - 멀티스레딩

2. start() 메소드는 멀티 스레딩을 구현합니다

의 원리 Thread 클래스 소스 코드의 start() 메소드 부분을 엽니다.

public synchronized void start() {
        if (threadStatus != 0)
            throw new IllegalThreadStateException();
        group.add(this);
        boolean started = false;
        try {
            start0();
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
            }
        }
}
private native void start0();

기본 키워드는 운영 체제를 호출하는 메소드를 의미하며, start0() 메소드는 운영 체제 메소드의 메소드입니다.

스레드의 시작은 운영 체제의 리소스 할당을 포함하므로 특정 스레드의 시작은 운영 체제에 따라 다르게 구현되어야 합니다. JVM은 다양한 운영 체제에 정의된 start0() 메소드에 따라 다양한 구현을 구현합니다. 이러한 방식으로 start0() 메서드의 이름은 다중 스레드 수준에서 변경되지 않으며 운영 체제마다 구현이 다릅니다.

자바 - 멀티스레딩

구성도

결론: Thread 클래스의 start() 메소드만이 운영체제 자원을 할당할 수 있으므로 멀티스레드를 시작하는 방법은 다음과 같다. 항상 Thread 클래스의 start() 메서드입니다.


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