Futrue 디자인 모델
5412 단어 디자인 모드
package com.healist.coder;
/**
* @Author healist
* @Description
* @Create 2018-03-20 5:09
*/
public class FutureLearn {
interface Data{
public String getResult();
}
public static class FutureData implements Data{
private RealData realData;
protected boolean isReady = false;
public synchronized void setRealData(RealData realData) {
while (isReady) {
return;
}
this.realData = realData;
isReady = true;
notifyAll();
}
public synchronized String getResult() {
while (!isReady) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return realData.result;
}
}
static class RealData implements Data {
private final String result;
public RealData(String para) {
//
StringBuffer sb = new StringBuffer();
for(int i=0; i<10; i++) {
sb.append(para);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
result = sb.toString();
}
public String getResult() {
return result;
}
}
static class Client {
public Data request(final String queryStr) {
final FutureData futureData = new FutureData();
new Thread() {
@Override
public void run() {
RealData realData = new RealData(queryStr);
futureData.setRealData(realData);
}
}.start();
return futureData;
}
}
public static void main(String[] args) {
Client client = new Client();
Data data = client.request("name");
System.out.println(" ");
try{
// sleep
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//
System.out.println(" :" + data.getResult());
}
}
JDK 에서 도 이 모델 의 인 터 페 이 스 를 제 공 했 습 니 다. Future, RunnableFurure 인 터 페 이 스 는 Future 와 Runnable 인 터 페 이 스 를 계승 하고 RunnableFurure 의 주요 실현 유형 은 Future Task 입 니 다.
그 사용 과 응용 장면 은 이 글 에서 Future Task 의 용법 과 두 가지 자주 사용 하 는 장면 을 보십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.