我使用wait()和notify()机制学习了java中的多线程。

但我很好奇输出一个简单的多线程Java应用程序。

代码如下:

class Q {

int n;

boolean valueSet = false;

synchronized int get() {

if (!valueSet) {

try {

wait();

} catch (InterruptedException e) {

System.out.println("InterruptedException caught");

}

}

System.out.println("Got: " + n);

valueSet = false;

notify();

return n;

}

synchronized void put(int n) {

if (valueSet) {

try {

wait();

} catch (InterruptedException e) {

System.out.println("InterruptedException caught");

}

}

this.n = n;

valueSet = true;

System.out.println("Put: " + n);

notify();

}

}

class Producer implements Runnable {

Q q;

Producer(Q q) {

this.q = q;

new Thread(this, "Producer").start();

}

public void run() {

int i = 0;

while (true) {

q.put(i++);

}

}

}

class Consumer implements Runnable {

Q q;

Consumer(Q q) {

this.q = q;

new Thread(this, "Consumer").start();

}

public void run() {

while (true) {

q.get();

}

}

}

class PCFixed {

public static void main(String args[]) {

Q q = new Q();

new Producer(q);

new Consumer(q);

System.out.println("Press Control-C to stop.");

}

}拳头,我运行该应用程序之后,我点击调试工具中的“停止”按钮来停止应用程序。这使得两个“奇怪的类型输出”:

这是第一次应用程序运行的输出:

这是第二次应用程序运行的输出:

为什么我们有两个重复的输出行:“put:13177”

为什么我们有两个重复的输出行:“got:2713”。

那个结果让我感到困惑!有些身体可以帮助我理解这个问题!

感谢先进。

java点击按钮结线程_多线程的Java应用程序在调试工具Netbeans中单击“停止”按钮时输出一个奇怪的结果...相关推荐

  1. JAVA-多线程 三 {多线程状态}JAVA从基础开始 -- 3

    JAVA-多线程 三 {多线程状态}(JAVA从基础开始 -- 3 线程状态 停止方法_stop (舍弃) 休眠状态_sleep 线程礼让_yield 线程强制执行_ join 线程状态观测_Thre ...

  2. java线程的创建线程_多线程(Thread、线程创建、线程池)

    第1章 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序, ...

  3. 虚拟机实现java线程_深入理解java虚拟机(23):java与多线程

    线程有以下三种实现方式 1.使用内核线程方式实现,优点内核完成线程切换和操纵调度器进行调度,并且负责将线程任务映射到处理器上.程序一般不使用内核线程会使用一种轻量级进程,轻量级进程与内核线程一对一模型 ...

  4. java并行流 阻塞主线程_多线程入门案例与java8的并行流

    java8 实例请移步https://www.cnblogs.com/ngLee/p/14021859.html 进程与线程 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 多线程的创建方式 ...

  5. future.cancel不能关闭线程_多线程与高并发笔记

    1. 创建线程的四种方式 实现Runnable 重写run方法 继承Thread 重写run方法 线程池创建 Executors.newCachedThreadPool() 实现Callable接口 ...

  6. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  7. c++thread里暂停线程_多线程技术

    1.程序 程序(Program)"是一个静态的概念,一般对应于操作系统中的一个可执行文件,比如:我们要启动酷狗听音乐,则对应酷狗的可执行程序.当我们双击酷狗,则加载程序到内存中,开始执行该程 ...

  8. auto.js停止所有线程_多线程快速入门(二)及面试题

    获取线程对象以及名称 常用线程api方法 start()启动线程 currentThread()获取当前线程对象 getID()获取当前线程ID Thread-编号 该编号从0开始 getName() ...

  9. java显示多个地区时钟_妙用Java多线程机制实现多个时区时钟显示

    妙用Java多线程机制实现多个时区时钟显示 [摘要]在许多公共场合下,需要提供时钟显示,如机场.火车站.汽车站.酒店等,特别是一些需要接待外宾的场所,处理显示本地区时间以外还必须显示其他时区时间.本文 ...

最新文章

  1. C++开源跨平台类库集
  2. Pytorch中用于深度学习常见的激活函数
  3. 蓝桥杯:基础练习 回文数
  4. 工业互联网 — 5G 边缘计算与 IIoT
  5. app测试流程和重点_APP开发测试流程是怎么样的?
  6. netbeans html 格式化,在NetBeans IDE8.0中怎么把html的文件转换成jsp格式
  7. CS231n Convolutional Neural Networks for Visual Recognition------Numpy Tutorial
  8. 最优化学习笔记(一)预备知识
  9. luogu_1495【题解】中国剩余定理
  10. Linear Regression Using Least Squares Method 代码实现
  11. python原理_强化学习:原理与Python实现
  12. 解析button和input type=”button”的区别
  13. jsp获取相对路径网址的方法 request.getContextPath()
  14. html二维数组查找车票,火车票售票系统
  15. 自己整理的申论知识体系梳理分享
  16. html计算梯形的面积,梯形的面积计算
  17. mediawiki mysql配置_MediaWiki 搭建与配置使用
  18. 【计算机网络】网关和路由器功能的有哪些不同
  19. 电脑同时连接有线和无线网络怎么设置有线网络优先
  20. 安卓逆向007之安卓系统架构

热门文章

  1. poj3190 Stall Reservations(贪心+STL)
  2. Ubuntu 运行Asp.net MVC3
  3. 网络动态负载均衡算法分析
  4. 当卷烟厂也那么卷后……
  5. B站这套教程火了,火速搬运!限时删除~
  6. linux errno 线程,Linux errno 错误对照表
  7. icinga2 php模块,在Ubuntu 18.04系统上安装Icinga2监视工具的方法
  8. 奥鹏20春在线作业c语言,电子科20春《C语言(专科)》在线作业3答案
  9. Python实现访问者模式
  10. Express Cookie 的基本使用