生产者/消费者模式

public class ValueObject {

    public static String value = "";

}
//生产者
public class Product {

    private String lock;
    
    public Product(String lock) {
        this.lock = lock;
    }
    
    public void setValue() {
        try {
            synchronized (lock) {
                if(!ValueObject.value.equals("")) {
                    lock.wait();
                }
                String value = System.currentTimeMillis() + "_" + System.nanoTime();
                System.out.println("set:" + value);
                ValueObject.value = value;
                lock.notify();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
}
//消费者
public class Customer {

    private String lock;
    
    public Customer(String lock) {
        this.lock = lock;
    }
    
    public void getValue() {
        try {
            synchronized (lock) {
                if(ValueObject.value.equals("")) {
                    lock.wait();
                }
                System.out.println("get:" + ValueObject.value);
                ValueObject.value = "";
                lock.notify();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
}
public class ThreadA extends Thread{

    private Product product;
    public ThreadA(Product product) {
        this.product = product;
    }
    
    @Override
    public void run() {
        while (true) {
            product.setValue();
            
        }
    }
}
public class ThreadB extends Thread {

    private Customer customer;

    public ThreadB(Customer customer) {
        this.customer = customer;
    }

    @Override
    public void run() {
        while (true) {
            customer.getValue();
        }
    }
}
public class Test {
    public static void main(String[] args) {
        try {
            String lock = new String("");
            Product product = new Product(lock);
            ThreadA threadA = new ThreadA(product);
            threadA.start();
            Thread.sleep(1000);
            Customer customer = new Customer(lock);
            ThreadB threadB = new ThreadB(customer);
            threadB.start();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
    }
}
image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容