<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    把困難踩在腳下

    迎難而上

     

    模擬生產零件系統程序

    要求:機器生產零件,工人取走零件,機器先生產一個1號零件,工人取走一個1號零件,機器再生產一個2號零件,工人再取走,然后機器生產一個1號零件,工人取走,機器再生產一個2號零件,工人取走,就這樣依次交替。在機器生產零件的時候,工人禁止取零件;在工人取零件的時候,機器禁止生產零件。

    生產狀態圖如下:

    1

    程序代碼如下:

     

    package com.dr.runnable3;
    //零件類
    class LingJian
    {
        
    private int num=1;
        
    private String name="車輪";
        
    /*
         * falg=true;表示機器正在生產零件,否則表示工人正在取零件
         
    */

        
    private boolean flag=true;
        
    public int getNum() {
            
    return num;
        }

        
    public void setNum(int num) {
            
    this.num = num;
        }

        
    public String getName() {
            
    return name;
        }

        
    public void setName(String name) {
            
    this.name = name;
        }

        
    public synchronized void set(int num,String name)
        
    {
            
    if(!flag)
            
    {
                
    try {
                    
    //工人在取零件,機器暫停工作
                    wait();
                    System.out.println(
    "工人正在取零件,等會在生產");
                    Thread.sleep(
    1000);
                }
     catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }

            
    //機器生產零件
            this.setNum(num);
            
    this.setName(name);
            
    //修改標志位,使工人開始工作
            flag=false;
            
    //喚醒等待的線程
            notify();
        }

        
    public synchronized void get()
        
    {
            
    if(flag)
            
    {
                
    try {
                    
    //flag=true;機器正在生產零件,工人先休息會
                    System.out.println("機器正在生產零件,請稍等");
                    wait();
                    Thread.sleep(
    1000);
                }
     catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }

            
    //工人取零件,機器休息
            System.out.println("零件號: "+this.getNum()+"--->零件名稱: "+this.getName());
            
    //修改標志位,使機器開始工作
            flag=true;
            
    //喚醒等待的線程
            notify();
        }

    }
     

    //生產零件
    class Produce implements Runnable//機器
    {
        
    private LingJian lj=null;
        
    public Produce(LingJian lj)
        
    {
            
    this.lj=lj;
        }

        
    public void run()
        
    {
            
    int i=0;
            
    while(true)
            
    {
                
    if(i==0)
                
    {
                    lj.set(
    1,"車輪");
                    i
    =1;
                }

                
    if(i==1)
                
    {
                    lj.set(
    2,"車軸");
                    i
    =0;
                }

            }

        }

    }
     

    //工人取零件
    class Consume implements Runnable//工人
    {
        
    private LingJian lj=null;
        
    public Consume(LingJian lj)
        
    {
            
    this.lj=lj;
        }

        
    public void run()
        
    {
            
    while(true)
            
    {
                lj.get();
            }

        }

    }
     

    //測試類
    public class LingJianDemo {
        
    public static void main(String args[])
        
    {
            
    //構建一個零件實例對象
            LingJian lj=new LingJian();
            Produce pro
    =new Produce(lj);
            Consume cse
    =new Consume(lj);
            
    new Thread(cse).start();
            
    new Thread(pro).start();
        }
     

    }
     

    此程序的輸出結果如圖:

    2

    這個程序涉及到并發多線程,多個線程共享一個資源,如果每個線程在同一時間同時修改這個資源那么勢必會造成資源信息的不正確,為了防止這種情況發生,我們在此程序中定義了兩個同步方法來給這個資源加上一把鎖,在一個時間點上只能有一個線程使用這個資源,其他線程等待。

    posted on 2010-11-09 11:51 馮魁 閱讀(218) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    公告

    快樂每一天!

    Everything is an object!

    常用鏈接

    留言簿(2)

    隨筆檔案

    學習網站

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品V天堂中文字幕| 皇色在线视频免费网站| 亚洲a∨无码一区二区| 亚洲国产精品自在在线观看| 免费很黄很色裸乳在线观看| 久久天天躁狠狠躁夜夜免费观看| 中出五十路免费视频| 麻豆安全免费网址入口| 亚洲日韩中文字幕一区| 亚洲成人免费在线观看| 亚洲av午夜福利精品一区 | 日韩亚洲国产二区| 99久久综合精品免费| 一区免费在线观看| 亚洲乱亚洲乱妇24p| 亚洲人成伊人成综合网久久久| 好吊妞998视频免费观看在线| 可以免费观看的毛片| 久久久亚洲精华液精华液精华液 | 久久久久国产免费| 一级做a爰性色毛片免费| 亚洲欧洲日韩国产一区二区三区| 亚洲国产成人私人影院| 亚洲狠狠爱综合影院婷婷| 大学生a级毛片免费观看| 24小时在线免费视频| 日韩免费电影网站| 亚洲av综合av一区二区三区| 久久久久亚洲av无码专区| 国产福利在线免费| 暖暖日本免费中文字幕| 亚洲国产aⅴ成人精品无吗| 亚洲色偷偷综合亚洲AV伊人蜜桃| 亚洲小说区图片区| 亚洲视频一区调教| 亚洲Av永久无码精品三区在线| 国产一区二区免费在线| 精品久久久久久久免费人妻| 曰批全过程免费视频在线观看| 国产精品视频免费观看| 亚洲毛片免费视频|