多线程间通信——生产者消费者问题

生产和消费同时进行,需要多线程。但是执行的任务不相同,处理的资源却是相同的:线程间的通信。

1、存在的问题及解决

期望生产一个商品就被消费掉,再生产下一个商品。

 1 /**
 2  * 案例:期望生产一个商品就被消费掉,再生产下一个商品。
 3  */
 4 //1、描述资源
 5 class Resource{
 6     private String name;
 7     private int count=1;
 8     public Object lock=new Object();
 9     public void set(String name) throws InterruptedException {
10         //给成员变量赋值并加上编号
11         this.name = name+count;
12         //编号自增
13         count++;
14         //打印生产了哪个商品
15         Thread.sleep(500);
16         System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);
17     }
18     
19     public void out() {
20         System.out.println(Thread.currentThread().getName()+"...消费者.."+this.name);
21     }
22 }
23 
24 //2、描述生产者
25 class Producer implements Runnable{
26     private Resource r;
27     public Producer(Resource r){
28         this.r=r;
29     }
30     @Override
31     public void run() {
32         while(true) {
33                 try {
34                     r.set("面包");
35                 } catch (InterruptedException e) {
36                     // TODO Auto-generated catch block
37                     e.printStackTrace();
38                 }        
39         }
40     }    
41 }
42 //3、描述消费者
43 class Consumer implements Runnable{
44     private Resource r;
45     public Consumer(Resource r){
46         this.r=r;
47     }
48     @Override
49     public void run() {
50         while(true) {
51                 r.out();
52         }
53     }    
54 }
55 
56 public class ThreadMain {
57     public static void main(String[] args) {
58         //1、创建资源对象
59         Resource r=new Resource();
60         //2、创建线程任务
61         Producer p=new Producer(r);
62         Consumer c=new Consumer(r);
63         //3、创建线程对象
64         Thread t1=new Thread(p);
65         Thread t2=new Thread(c);
66         
67         t1.start();
68         t2.start();
69     }
70 }
View Code

相关文章:

  • 2021-07-13
  • 2021-05-30
  • 2021-12-14
  • 2022-01-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-15
猜你喜欢
  • 2022-02-22
  • 2021-12-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案