IT梦想者 2016-10-30 12:13 采纳率: 14.3%
浏览 735

java 中的线程同步问题,求大神!!

java 中的线程同步问题,如下代码是放苹果和吃苹果的线程同步,但一次只能放一个,如何做到一次可以放三个??救助大神!!

package com.aiit.app;
//能够实现同步 jdk1.0
public class SynchronizedPlate implements IBuffer{
private int value ; //只有1个盘子来完成同步
// private int [] values = new int[3];//
private boolean isEmpty ; //false
@Override
public synchronized void set(int value) { //向盘子中放东西
//先要判断盘子是否为空
while(isEmpty) { //开始
System.out.println("生产者线程尝试向盘子中放数据");
System.out.println("isEmpty="+this.isEmpty+",value=" + this.value);
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//可以放东西了
this.value = value ;
System.out.println("生产者向盘子中放了数据,值是:" + this.value);
//改变这个盘子的状态
this.isEmpty = true ;
//通知正在等待的消费者线程
this.notifyAll();
}

@Override
public synchronized int get() {
      while(!isEmpty) {
      System.out.println("消费者线程尝试从盘子中取数据....");   
      System.out.println("isEmpty="+this.isEmpty+",value=" + this.value);
       try {
        this.wait();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
     }//结束
      int newValue  = this.value  ;
      System.out.println("消费者从向盘子中取了数据,值是:" + newValue);
      this.isEmpty  = false  ;  //盘子变成空的
      //通知生产者线程,你可以放数据了
      this.notify();
    return newValue;
}

}

  • 写回答

1条回答 默认 最新

  • devmiao 2016-10-31 01:05
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程