오늘 친구가 백그라운드에서 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)를 참고해주세요!