手记

java线程实现生产者与消费者的模拟操作

1.仓库Storage.java

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

package demo03;

 

public class Storage   {

    private final static int MAX_NUM=1000;//仓库最大的储存数量

    private int store;//目前仓库存储的数量

     

    public Storage(int store){

        this.store=store;

    }

    //入库操作

    public synchronized void in(int num){

        String   threadName=Thread.currentThread().getName();

        if(this.store+num>MAX_NUM){

             System.out.println(threadName+"被挂起!");

             try {

                this.wait();

            }   catch (InterruptedException   e) {

                //   TODO Auto-generated catch block

                e.printStackTrace();

            }

         }

          

        this.store+=num;//入库

        this.notifyAll();//唤醒等待线程

        System.out.println(threadName+"生成产品数量为:"+num+"  仓库现在的数量为:"+this.store);

    }

    //出库操作

    public synchronized void out(int num){

        String   threadName=Thread.currentThread().getName();

        if(this.store<num){   system.out.println(threadname+"被挂起!");="" try="" {="" this.wait();="" }="" catch="" (interruptedexception="" e)="" todo="" auto-generated="" block="" e.printstacktrace();="" this.store-="num;//出库" this.notify();="" 唤醒等待的线程="" system.out.println(threadname+"消费产品数量为:"+num+"=""   仓库现在的数量为:"+this.store);="" }<="" pre=""></num){>

 

2.生产者 Producter.java

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

package demo03;

 

public class Producter   extends Thread{

    private int num;//入库数量

    private Storage store;

    public Producter(int num,Storage store){

        this.num=num;

        this.store=store;

    }

     

    @Override

    public void run() {

        this.store.in(num);//入库

    }

}

 

3.消费者Customer.java

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

package demo03;

 

public class Customer   extends Thread{

    private int num;//出库数量

    private Storage store;

    public Customer(int num,Storage store){

        this.num=num;

        this.store=store;

    }

     

    @Override

    public void run() {

        this.store.out(num);//出库

    }

}

4.测试 Test.java

package demo03;

 

public class Test {

 

    /**

     * @param   args

     */

    public static void main(String[]   args) {

           Storage   store=new Storage(500);

           Producter   p1=new Producter(200,store);

           Producter   p2=new Producter(500,store);

           Producter   p3=new Producter(100,store);

            

           Customer   c1=new Customer(300,   store);

           Customer   c2=new Customer(400,   store);

           Customer   c3=new Customer(600,   store);

            

           p1.start();

           p2.start();

           p3.start();

            

           c1.start();

           c2.start();

           c3.start();

    }

 

}

 

 

原文链接:http://www.apkbus.com/blog-813041-60951.html

0人推荐
随时随地看视频
慕课网APP