大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java多線程編程概述
Java多線程的安全問題
Java多線程同步
Java多線程間的通信
Java線程Lock
Java多線程管理
保障線程安全的設計技術
Java鎖的優化及注意事項
Java多線程集合
【Java多線程】單例模式與多線程

Java生產者消費者模式

在Java中,負責產生數據的模塊是生產者,負責使用數據的模塊是消費者. 生產者消費者解決數據的平衡問題,即先有數據然后才能使用,沒有數據時,消費者需要等待。

生產-消費:操作值

package com.wkcto.producerdata;

/**
 * 定義一個操作數據的類
 * 北京動力節點老崔
 */
public class ValueOP {
    private String value = "";

    //定義方法修改value字段的值
    public void setValue(){
        synchronized ( this ){
            //如果value值不是""空串就等待
            while ( !value.equalsIgnoreCase("")){
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //如果value字段值是容串, 就設置value字段的值
            String value = System.currentTimeMillis() + " - " + System.nanoTime();
            System.out.println("set設置的值是: " + value);
            this.value = value;
//            this.notify();        //在多生產者多消費者環境中,notify()不能保證是生產者喚醒消費者,如果生產者喚醒的還是生產者可能會出現假死的情況
            this.notifyAll();
        }
    }

    //定義方法讀取字段值
    public void getValue(){
        synchronized (this){
            //如果value是空串就等待
            while ( value.equalsIgnoreCase("")){
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //不是空串,讀取 字段值
            System.out.println("get的值是: " + this.value);
            this.value = "";
            this.notifyAll();
        }
    }
}
package com.wkcto.producerdata;

/**
 * 定義線程類模擬生產者
 * 北京動力節點老崔
 */
public class ProducerThread extends Thread {
    //生產者生產數據就是調用ValueOP類的setValue方法給value字段賦值
    private ValueOP obj;

    public ProducerThread(ValueOP obj) {
        this.obj = obj;
    }

    @Override
    public void run() {
        while (true){
            obj.setValue();
        }
    }
}
package com.wkcto.producerdata;

/**
 * 定義線程類模擬消費者
 * 北京動力節點老崔
 */
public class ConsumerThread extends Thread {
    //消費者使用數據, 就是使用ValueOP類的value字段值
    private ValueOP obj;

    public ConsumerThread(ValueOP obj) {
        this.obj = obj;
    }

    @Override
    public void run() {
        while (true){
            obj.getValue();
        }
    }
}
package com.wkcto.producerdata;

/**
 * 測試多生產,多消費的情況
 * 北京動力節點老崔
 */
public class Test2 {
    public static void main(String[] args) {
        ValueOP valueOP = new ValueOP();

        ProducerThread p1 = new ProducerThread(valueOP);
        ProducerThread p2 = new ProducerThread(valueOP);
        ProducerThread p3 = new ProducerThread(valueOP);
        ConsumerThread c1 = new ConsumerThread(valueOP);
        ConsumerThread c2 = new ConsumerThread(valueOP);
        ConsumerThread c3 = new ConsumerThread(valueOP);

        p1.start();
        p2.start();
        p3.start();
        c1.start();
        c2.start();
        c3.start();
    }
}
操作棧

使生產者把數據存儲到List集合中, 消費者從List集合中取數據,使用List集合模擬棧。

package com.wkcto.produerstack;

import java.util.ArrayList;
import java.util.List;

/**
 * 模擬棧
 * 北京動力節點老崔
 */
public class MyStack {
    private List list = new ArrayList();        //定義集合模擬棧
    private static final  int MAX = 3;      //集合的最大容量

    //定義方法模擬入棧
    public synchronized void push(){
        //當棧中的數據已滿 就等待
        while ( list.size() >= MAX ){
            System.out.println(Thread.currentThread().getName() + " begin  wait....");
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        String data = "data--" + Math.random();
        System.out.println( Thread.currentThread().getName() + "添加了數據: " + data);
        list.add(data);
//        this.notify();            //當多個生產者多個消費者時,使用notify()可能會出現假死的情況
        this.notifyAll();
    }

    //定義方法模擬出棧
    public synchronized void pop(){
        //如果沒有數據就等待
        while ( list.size() == 0 ){
            try {
                System.out.println(Thread.currentThread().getName() + " begin  wait....");
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println( Thread.currentThread().getName() + "出棧數據:" + list.remove(0) );
        this.notifyAll();
    }
}
package com.wkcto.produerstack;

/**
 * 生產者線程
 * 北京動力節點老崔
 */
public class ProduerThread extends  Thread {
    private  MyStack stack;

    public ProduerThread(MyStack stack) {
        this.stack = stack;
    }

    @Override
    public void run() {
        while (true){
            stack.push();
        }
    }
}
package com.wkcto.produerstack;

/**
 * 消費線程
 * 北京動力節點老崔
 */
public class ConsumerThread extends  Thread {
    private  MyStack stack;

    public ConsumerThread(MyStack stack) {
        this.stack = stack;
    }

    @Override
    public void run() {
        while (true){
            stack.pop();
        }
    }
}
package com.wkcto.produerstack;


/**
 * 測試多生產多消費的情況
 * 北京動力節點老崔
 */
public class Test02 {
    public static void main(String[] args) {
        MyStack stack = new MyStack();

        ProduerThread  p = new ProduerThread(stack);
        ProduerThread  p2 = new ProduerThread(stack);
        ProduerThread  p3 = new ProduerThread(stack);
        ConsumerThread c1 = new ConsumerThread(stack);
        ConsumerThread c2 = new ConsumerThread(stack);
        ConsumerThread c3 = new ConsumerThread(stack);
        p.setName("生產者1號");
        p2.setName("生產者2號");
        p3.setName("生產者3號");
        c1.setName("消費者1號");
        c2.setName("消費者2號");
        c3.setName("消費者3號");

        p.start();
        p2.start();
        p3.start();
        c1.start();
        c2.start();
        c3.start();

    }
}
全部教程
主站蜘蛛池模板: 国产精品亚洲欧美一区麻豆 | 欧美一级爱操视频 | 99热这里只有精品6免费 | 四虎免费紧急入口观看 | 一级毛片在线播放 | 福利视频精品 | 人人狠狠综合久久亚洲88 | 日本大黄视频 | 女人18毛片黄 | 久久国产亚洲高清观看5388 | 国产精品久久久久久久午夜片 | 一级一毛片a级毛片欧美 | 青青热久久久久综合精品 | 成人a免费α片在线视频网站 | 国产精品456| 色婷婷狠狠久久综合五月 | 一区在线免费 | 亚洲欧美自拍另类图片色 | 欧美va放荡人妇大片 | 成人三级视频在线观看 | 日韩成人高清 | 久久精品网址 | 久久久久毛片免费观看 | 欧美毛片在线 | 成人免费牛牛在线视频 | 国产成人亚综合91精品首页 | 中国特级黄一级真人毛片 | 日本涩涩网站 | 亚洲va精品中文字幕 | 狠狠色狠狠色综合 | 亚洲综合激情 | 性欧美处| 国产一区二区不卡视频 | aaa一区二区三区 | 欧美性xxx| 91九色视频 | 999精品视频在线观看 | 四虎影视8848a四虎在线播放 | 欧美videos粗暴高清性 | 免费国产一级特黄aa大片在线 | 国产欧美亚洲另类第一页 |