<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)

    隨筆檔案

    學習網站

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人女人A级毛片免费软件| 国产日韩在线视频免费播放| 1000部啪啪未满十八勿入免费| 中文字幕久久亚洲一区| 国产免费MV大全视频网站| 亚洲精品无码AV中文字幕电影网站| 亚洲精品久久无码| 成人永久免费高清| 免费无码午夜福利片69| 久久久久亚洲AV无码专区桃色| 久青草国产免费观看| 国产亚洲精品久久久久秋霞| 精品四虎免费观看国产高清午夜| 久久亚洲精品视频| 88av免费观看| 2017亚洲男人天堂一| 国产精品极品美女免费观看| 九一在线完整视频免费观看| 国产亚洲人成网站在线观看不卡| 久久精品私人影院免费看| 久久久久久亚洲AV无码专区| 国产免费看JIZZ视频| 国产亚洲人成在线影院| 2048亚洲精品国产| 午夜视频在线免费观看| 亚洲成a人片在线看| 亚洲人成网站18禁止一区| 午夜无码A级毛片免费视频| 亚洲免费在线观看视频| 免费一看一级毛片| 久久免费福利视频| 亚洲色欲啪啪久久WWW综合网| 亚洲国产精品13p| 国产拍拍拍无码视频免费| 亚洲人成综合网站7777香蕉| 亚洲А∨精品天堂在线| 久久国产精品成人片免费| 国产精品亚洲а∨无码播放不卡 | 中文字幕免费观看视频| 亚洲国产精品成人综合色在线婷婷| 免费观看男人免费桶女人视频|