자바 는 두 개의 스 레 드 시 뮬 레이 션 대 화 를 만 들 고 출력 을 교체 하여 분석 합 니 다.
실현 방식
네,이것 은 전형 적 인 소비자 와 생산자 의 문제 로 볼 수 있 습 니 다.코드 설명 을 자세히 보 세 요.
코드 내용
소비자,생산자 가 발생 하 는 정 보 를 가 져 가 는 것 을 책임 집 니 다.
/**
* @auther::9527
* @Description:
* @program:
* @create: 2019-08-10 10:45
*/
public class Consumer extends Thread{
private MiddleMan mid = null;
public Consumer() {
}
public Consumer(MiddleMan movie) {
this.mid = movie;
}
@Override
public void run() {
// 50
for (int i = 0; i <1000 ; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.mid.get();
}
}
}
생산자
/**
* @auther::9527
* @Description:
* @program:
* @create: 2019-08-10 10:39
*/
public class Producer implements Runnable{
//
private MiddleMan mid = null;
private boolean flag = false;
public Producer(MiddleMan movie) {
this.mid = movie;
}
public Producer() {
}
@Override
public void run() {
// ,
for (int i = 0; i <1000; i++) {
if (flag){
this.mid.set("jack :"," ");
flag = false;
} else {
this.mid.set("rose :"," ?");
flag = true;
}
}
}
}
정보 중계 장 소 는 생산 과 소비의 리듬 을 통제 하 는 것 을 책임 진다.
package com.duo;
/**
* @auther::9527
* @Description:
* @program:
* @create: 2019-08-10 10:36
*/
public class MiddleMan {
private String name;
private String info;
private boolean flag = true; // , ,
public String getName() {
return name;
}
public String getInfo() {
return info;
}
public MiddleMan(String name, String info) {
this.name = name;
this.info = info;
}
public MiddleMan() {
}
public synchronized void set(String name,String info){
if (!flag){
try {
super.wait(); //
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.name = name;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.info = info;
flag = false; // ,
super.notify(); // Object notify ,
}
public synchronized void get(){
if (flag){
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(this.getName()+"-"+this.getInfo());
flag = true;
super.notify(); //
}
}
프로그램 입구
/**
* @auther::9527
* @Description:
* @program:
* @create: 2019-08-10 11:47
*/
public class Test {
public static void main(String[] args) {
// ===>>
MiddleMan mid = new MiddleMan();
Thread producer = new Thread(new Producer(mid));
Thread consumer = new Thread(new Consumer(mid));
producer.start();
consumer.start();
}
}
실행 결과이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.