>  기사  >  Java  >  [자바 기초] 스레드 인스턴스

[자바 기초] 스레드 인스턴스

黄舟
黄舟원래의
2017-02-07 10:58:081471검색

오늘 친구가 백그라운드에서 Java 멀티스레딩의 개념에 대해 질문했습니다. 편집자는 기본 스레드 개념을 숙지해야만 멀티스레딩을 더 깊이 이해할 수 있다고 생각합니다. 루프가 병렬로 실행되는 경우 여러 작업이 동시에 수행되면 실제 사용 중에 여러 스레드가 동일한 데이터 블록에서 작동할 수 있으므로 멀티스레딩 문제가 발생합니다. 먼저 쓰레드의 기본 개념을 이해하고 간단한 코드 구현

자바 쓰레드 학습의 고전적인 예-리더와 작가 시연

자바 쓰레드 학습의 가장 고전적인 예-리더와 작가를 중심으로 Thread 관련 지식 활용

-스레드 시작 및 실행

-스레드 휴면(sleep)

-데이터 객체 잠금(동기화)

- 데이터 객체 대기 및 해제(대기 및 알림)

프로그램 구현:

-ObjectData 데이터 클래스 객체, 잠금은 동기화된 키워드를 통해 구현되며 스레드 판독기 및 기록기에서 사용됩니다.

-ConsumerThread 소비자 스레드는 데이터 객체의 카운트 값을 읽은 후 생산자 스레드에 알립니다.

-ProductThread 생산자 스레드는 데이터 객체의 카운트 값에 대해 작동하며 매번 1을 추가합니다. , 그런 다음 소비자 스레드에 알림

클래스 구조 다이어그램은 다음과 같습니다.

[자바 기초] 스레드 인스턴스

코드 구현

소비자 읽기 스레드

package com.gloomyfish.jse.thirdteen;
 
public class ConsumerThread extends Thread {
    private ObjectData data;
    public ConsumerThread(ObjectData data) {
        this.data = data;
    }
 
    @Override
    public void run() {
        while(true) {
            try {
                synchronized (data) {
                    data.wait();
                    data.read();
                    data.notify();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
 
}

쓰기 스레드 - 생산자 스레드

package com.gloomyfish.jse.thirdteen;
 
public class ProductThread extends Thread {
    private ObjectData data;
 
    public ProductThread(ObjectData data) {
        this.data = data;
    }
 
    @Override
    public void run() {
        while (true) {
            try {
                synchronized (data) {
                    data.write();
                    Thread.sleep(3000);
                    data.notify();
                    data.wait();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
 
}

데이터 개체 클래스

package com.gloomyfish.jse.thirdteen;
 
public class ObjectData {
 
    private int count;
     
    public ObjectData() {
        count = 0;
    }
     
    public void read() {
        System.out.println("read count : " + count);
        System.out.println();
    }
     
    public void write() {
        count++;
        System.out.println("write count : " + count);
    }
}

테스트 코드:

public static void main(String[] args) {
        ObjectData data = new ObjectData();
        ConsumerThread ct = new ConsumerThread(data);
        ProductThread pt = new ProductThread(data);
 
        ct.start();
        pt.start();
}

요약:

스레드 간에 완료된 샘플 프로그램 코드 대기 및 알림을 통해 데이터 읽기 및 쓰기

동기 제어를 구현하는 방법입니다. Java의 동기화 키워드의 사용법과 스레드 사용법을 보여줍니다.

위 내용은 [java 기본] 스레드 인스턴스 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


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