课程设计——利用信号量实现生产者-消费者问题(java)

发布时间:2017-7-1 11:07:11编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"课程设计——利用信号量实现生产者-消费者问题(java) ",主要涉及到课程设计——利用信号量实现生产者-消费者问题(java) 方面的内容,对于课程设计——利用信号量实现生产者-消费者问题(java) 感兴趣的同学可以参考一下。

package cn.Douzi.ProductConsume;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class ProCon {

    static int LEN = 3;
    static public int PROTIME = 1500; 
    static public int CONTIME = 1000; 
    
    static public int totalData = 1000;
    static public Queue<Data> buffer = new LinkedList<>();
    static public Buffer empty = new Buffer(0, 10);
    static public Mutex mutex = new Mutex(1);
    
    
    public ProCon() {
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("|-----------------------------------------------------------|");
        System.out.println("|                                                           |");
        System.out.println("|                   Welcome to My System !                  |");
        System.out.println("|                    ↖   By Douzi   2017 ↗                                                                        |");
        System.out.println("|                      生产消费开始进行                                                                               |");
        System.out.println("|                                                           |");
        System.out.println("|-----------------------------------------------------------|\n");
        
        Scanner scaner = new Scanner(System.in);
        System.out.println("设置缓冲区大小: ");
        LEN = scaner.nextInt();
        System.out.println("缓冲区大小: " + LEN + "\n");
        
        System.out.println("设置生产休眠时间: ");
        ProCon.PROTIME = scaner.nextInt();
        System.out.println("设置消费休眠时间: ");
        ProCon.CONTIME = scaner.nextInt();
        
        ProductWindows pro = new ProductWindows();
        ConsumeWindows con = new ConsumeWindows();
        
        Thread t1 = new Thread(pro);
        Thread t2 = new Thread(con);
        t1.start(); t2.start();
    }

}

class ProductWindows implements Runnable {
    
    public ProductWindows() {
    }
    
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while (true) {
            try {
                Thread.sleep(ProCon.PROTIME);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            ProCon.totalData++;
            System.out.println("生产数据:" + ProCon.totalData);
            if (ProCon.buffer.size() < ProCon.LEN) {
                synchronized (ProCon.mutex) {
                    ProCon.buffer.add(new Data(ProCon.totalData));
                    System.out.println("将数据: " + ProCon.totalData + " 放入缓冲区");
                    System.out.println("此时缓冲区大小: " + ProCon.buffer.size() + "\n");
                }
            } else {
                System.out.println("缓冲区满,等待数据取出缓冲区.....................\n");
                ConsumeWindows con = new ConsumeWindows();
                Thread t2 = new Thread(con);
                t2.start();
                break;


上一篇:mysql给一张表新增字段,并设置该字段为外键
下一篇:数据库事务隔离级别+Spring 声明性事务隔离级别

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款