展开全部

首先说明 你的程序有漏洞

消费者32313133353236313431303231363533e78988e69d8331333361323534和生产者的模型 你搞错了

你应该在生产好了产品 就打印出来  产品 +1  而不是生产出来了 通知消费者之后 在产品+1

如果 找你这样  就是我产品已经生产出来了   通知消费者了

然后 生产者  准备开始  通知   +1

消费者  准备开始 消费 -1

这两个线程  你确定谁先执行;  如果通知的晚了 你的标识牌上说没有产品   可是消费者 看到了有一个产品 就消费了  ,你就纠结了  :我明明没有吧标示牌 更改过来呢 ,怎么他们就消费了呢;然后你感到自己很蠢;

正确的做法 是 :你生产出来 产品  就+1  然后通知消费者;

public class ProducerConsumerTest {

public static void main(String[] args) {

Box b = new Box();

Producer pr = new Producer(b);

Consumer cr = new Consumer(b);

pr.start();

cr.start();

}

}

class Box {

private int data;

private boolean ava = false;

public synchronized int setData(int value) {

while (ava == true) {

try {

wait();

} catch (InterruptedException e) {

}

}

data = value;

ava = true;

System.out.println("-1");

notifyAll();

return data;

}

// p

public synchronized int getData() {

while (ava == false) {

try {

wait();

} catch (InterruptedException e) {

}

}

ava = false;

System.out.println("+1");

notifyAll();

return data;

}

}

class Consumer extends Thread {

private Box b;

public Consumer(Box b) {

this.b = b;

}

@Override

public void run() {

int buffer = 0;

for (int i = 0; i

buffer = b.getData();

// System.out.println("Consumer" + "got:" + buffer);

}

}

}

class Producer extends Thread {

private Box b;

public Producer(Box b) {

this.b = b;

}

@Override

public void run() {

for (int i = 0; i

int c = b.setData(i);

// System.out.println("Pronducer" + "put:" + c);

try {

sleep((int) (Math.random() * 100));

} catch (InterruptedException e) {

}

}

}

}

java 多线程 int_java多线程问题相关推荐

  1. JAVA并发之多线程基础(2)

    除了我们经常用的synchronized关键字(结合Object的wait()和notify()使用)之外,还有对应的上篇文章讲到的方法JAVA并发之多线程基础(1)之外,我们日常中使用到最多的也就是 ...

  2. Java基础、多线程、JVM、集合八股文自述(持续更新)

    Java基础.多线程.JVM.集合八股文自述 一.Java基础 1.1 object类有哪些方法? getClass().hashCode().equals().clone().toString(). ...

  3. Java中的多线程编程(超详细总结)

    文章目录 Java中的多线程编程(超详细总结) 一.线程与多线程的概念 二.线程与进程之间的关系 三.一个线程的生命周期 四.多线程的目的和意义 五.线程的实现的方式 Java中的多线程编程(超详细总 ...

  4. Java回顾之多线程

    在这篇文章里,我们关注多线程.多线程是一个复杂的话题,包含了很多内容,这篇文章主要关注线程的基本属性.如何创建线程.线程的状态切换以及线程通信,我们把线程同步的话题留到下一篇文章中. 线程是操作系统运 ...

  5. Java基础之多线程详细分析

    在了解多线程之前,先来了解一下进程与线程之间的关系. 进程和线程: 进程是指在系统中正在执行的一个程序,每个进程之间是独立的. 线程是进程的一个基本执行单元.一个进程要想执行任务,必须得有线程(每1个 ...

  6. java.text.SimpleDateFormat多线程下的问题

    1. 今天在做性能压测的时候发现java.text.SimpleDateFormat多线程下的错误 2. 先贴出两段错误大家看一下: Exception in thread "pool-1- ...

  7. java面试题 多线程_Java面试常见关于多线程的面试题

    多线程是Java技术中常用而且相对比较难易理解的一个知识点.而且多线程也是企业实际应用中必备的技术,因此在面试的过程中,面试者经常被问到关于多线程的问题,遇到这些问题大家应该怎么办呢?赶紧恶补一下Ja ...

  8. JAVA并发之多线程基础(5)

    上面介绍了并发编程中的栅栏等JAVA并发之多线程基础(4) .通过唯一的一个终点线来帮助确定线程是多晚开始执行下一次操作. LockSupport 提供了一个比较底层的线程挂起操作.有点类似于susp ...

  9. JAVA中的多线程(一)

    JAVA中的多线程(一) 进程:是一个正在执行中的程序 每一个进程执行都有一个执行的顺序,该顺序是一个执行路径,或者叫控制单元 线程:就是进程中的一个独立的控制单元 线程在控制着进程的执行 一个进程中 ...

  10. Java基础之多线程框架

    一.进程与线程的区别 1.定义: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比 ...

最新文章

  1. 为什么需要使用到多线程
  2. 数学趣题——魔幻方阵
  3. 文献记录(part29)--Building crack identification and total quality management method based on deep ...
  4. python 输出 GPU内存 最大使用率
  5. Opencv--Mat图像基本操作
  6. Spark高级操作之json复杂和嵌套数据结构的操作二
  7. 专栏:谈谈我对当下大数据整顿的理解与风控建议
  8. glShadeModel
  9. Java 实现 植物大战僵尸 小游戏【附源码】
  10. PDF怎么转换成PPT?用迅读PDF大师,轻松解决教案问题
  11. vm虚拟服务器控制端,使用VMware虚拟机实现单主机双屏两人同时使用独立控制
  12. C/C++学习笔记——C基础:C语言概述
  13. Science封面6连发:人类最完整的基因组测序完成!
  14. BusyBox v1.22.1 (Ubuntu 1:1.22.0-15ubuntu1) built-in shell (ash) 开机黑屏
  15. validation插件
  16. php中文的正则表达式_php 正则表达式匹配中文汉字
  17. 基于C++的社交应用的数据存储与实现
  18. c语言中3次方函数图像,三次函数的性质
  19. SQL Server 2008服务器安装设置向导
  20. Android如何判断两字符串是否相等

热门文章

  1. 【基础软硬件】IEEE 754规定的浮点数规则与发送与接收float数据的代码示例
  2. Pytorch模型构造方法
  3. MySQL grant、revoke 用户权限注意事项
  4. Andrew Ng机器学习公开课笔记 -- Generative Learning algorithms
  5. POI--HSSFCell类
  6. linux 下网站压力测试工具webbench
  7. Oracle swap 100%案例分析
  8. IE6 PNG 透明
  9. jquery-galleryview-2.0 漂亮多样化的图片特效(多项自定义)
  10. layer关闭当前窗口并刷新父窗口