程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java多線程處理臨盆者花費者成績

java多線程處理臨盆者花費者成績

編輯:關於JAVA

java多線程處理臨盆者花費者成績。本站提示廣大學習愛好者:(java多線程處理臨盆者花費者成績)文章只能為提供參考,不一定能成為您想要的結果。以下是java多線程處理臨盆者花費者成績正文


本文實例講述了java多線程處理臨盆者花費者成績的辦法。分享給年夜家供年夜家參考。詳細剖析以下:

標題是如許的:

采取Java 多線程技巧,設計完成一個相符臨盆者和花費者成績的法式。對一個對象(槍膛)停止操作,其最年夜容量是12顆槍彈。臨盆者線程是一個壓入線程,它赓續向槍膛中壓入槍彈;花費者線程是一個射出線程,它赓續從槍膛中射出槍彈。

請求:

(1)給出剖析進程解釋。
(2)法式輸入,要模仿表現對槍膛的壓入和射出操作;
(2)設計法式時應斟酌到兩個線程的同步成績。

這個和有名的臨盆者花費者成績簡直是一樣的,這裡做一下簡略剖析。

照樣直接用代碼措辭吧,正文寫的很明確

package test;
import java.util.ArrayList;
import java.util.List;
public class testGun {
 public static void main(String[] args) 
 {
 GunClip clip=new GunClip();
 Producer p=new Producer(clip);
 Concumer c=new Concumer(clip);
 p.start();
 c.start();
 }
}
/* 起首我要有一個彈夾,*/
class GunClip   //彈夾   
{
 private List<Integer> list=null;//用來放槍彈
 private boolean bFull =false ; //懂得boolean變量很主要,表現滿沒滿
 //函數功效,像彈夾中放槍彈
 public synchronized void put(List list){
 if(!bFull){//意思是說彈夾沒有滿,那末就像外面放槍彈
  this.list=list;
  bFull=true;//放滿了槍彈,在把boolean變質變為true表現,彈夾滿了
  notify();//告訴,期待取槍彈的線程來取槍彈
 }
 //上面的try中得wait是當彈夾滿了的情形下,
 //即boolean為true,暫停本線程,期待取槍彈
 try{
  wait();
 }catch(Exception e){
  e.printStackTrace();
 }
 }
 public synchronized void get(){
 if(!bFull){//假如彈夾沒滿那末就不克不及取槍彈
  try{
  wait();//彈夾沒滿,所以取不了,只能期待,只要彈夾滿了能力取
  }catch(Exception e){
  e.printStackTrace();
   }
 }
 //上面是彈夾滿了,那末我開端取槍彈
 System.out.println("\n"+"機槍開端射出槍彈:"+"\n");
 for(int i=list.size();i>0;i--){
      int j=(Integer)list.get(i-1);
  System.out.println("已射出第"+j+"顆槍彈");
 }
 //彈夾被取空了,即沒槍彈了,那末只能期待從新填充,
 //所以boolean變成false,表現沒滿,告訴裝槍彈的線程裝槍彈
 bFull=false;
 notify();
 }
}
//臨盆者,即裝槍彈,上面和通知布告板差不多,要有一個彈夾的實體
class Producer extends Thread
{
 private GunClip clip;
 private List<Integer> list;
 Producer(GunClip clip){
 this.clip=clip;
 }
 public void run(){
 for(int i=0;i<3;i++){ //讓它臨盆3個彈夾
  list=new ArrayList();
  System.out.println("\n"+"機槍開端壓入槍彈:"+"\n");
  for(int j=0;j<12;j++){
  list.add(j+1);
  System.out.println("已壓入第"+(j+1)+"顆槍彈");
  }
  clip.put(list);
  }
 } 
}
//花費者,發射槍彈
class Concumer extends Thread
{ 
 private GunClip clip;
 Concumer(GunClip clip){
 this.clip=clip;
 }
 public void run(){
 while(true){
  clip.get();
 }
 }
}

願望本文所述對年夜家的java法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved