병발 디자인 모드 Pipeline 모드

2573 단어
핵심 사상
데이터 가 의존 하 는 임 무 를 항목 별로 나 누 어 수행 하고 이전 항목 의 추 후 수행 에 의존 합 니 다.
예시 1
계산 (B + C) * B / 2
/**
 *        
 */
public class Context {
    public double B;
    public double C;
    public double r;
    public String org;
}
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;

public class Plus extends Thread {

    public static BlockingQueue bq = new LinkedBlockingDeque<>();

    @Override
    public void run() {
        while (true) {
            try {
                Context ctx = bq.take();
                ctx.r = ctx.B + ctx.C;
                Multiply.bq.add(ctx);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;

public class Multiply extends Thread {

    public static BlockingQueue bq = new LinkedBlockingDeque<>();

    @Override
    public void run() {
        while (true) {
            try {
                Context ctx = bq.take();
                ctx.r = ctx.B * ctx.r;
                Div.bq.add(ctx);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;

public class Div extends Thread {

    public static BlockingQueue bq = new LinkedBlockingDeque<>();

    @Override
    public void run() {
        while (true) {
            try {
                Context ctx = bq.take();
                ctx.r = ctx.r / 2;
                System.out.println(ctx.org + "=" + ctx.r);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
import java.text.MessageFormat;

public class PStreamMain {
    public static void main(String[] args) throws InterruptedException {
        //          
        new Plus().start();
        new Multiply().start();
        new Div().start();

        for (int i = 1; i <= 10; i++) {
            for (int j = 1; j <= 10; j++) {
                Context ctx = new Context();
                ctx.B = i;
                ctx.C = j;
                ctx.org = MessageFormat.format("({0}+{1})*{0}/2",ctx.B,ctx.C);
                Plus.bq.add(ctx);
            }
        }
    }
}

좋은 웹페이지 즐겨찾기