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

我使用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.");

}

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

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

aBQf4.png

pRI1N.png

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

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

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

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

感谢先进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 544. 输出比赛匹配对(NBA季后赛对阵图)

文章目录1. 题目2. 解题1. 题目 在 NBA 季后赛中,我们总是安排较强的队伍对战较弱的队伍,例如用排名第 1 的队伍和第 n 的队伍对决,这是一个可以让比赛更加有趣的好策略。 现在,给你 n 支队伍,你需要以字符串格式输出…

LeetCode 1428. 至少有一个 1 的最左端列(二分查找)

文章目录1. 题目2. 解题2.1 二分查找2.2 直接走阶梯1. 题目 (这是一个交互题) 我们称只包含元素 0 或 1 的矩阵为二进制矩阵。 矩阵中每个单独的行都按非递减顺序排序。 给定一个这样的二进制矩阵,返回至少包含一个 1 的最左端列的索引&am…

LeetCode 370. 区间加法(差分思想)

文章目录1. 题目2. 解题1. 题目 假设你有一个长度为 n 的数组,初始情况下所有的数字均为 0,你将会被给出 k​​​​​​​ 个更新的操作。 其中,每个操作会被表示为一个三元组:[startIndex, endIndex, inc],你需要将…

LeetCode 1256. 加密数字(bitset)

文章目录1. 题目2. 解题1. 题目 给你一个非负整数 num ,返回它的「加密字符串」。 加密的过程是把一个整数用某个未知函数进行转化,你需要从下表推测出该转化函数: 示例 1: 输入:num 23 输出:"10…

java执行程序默认多线程吗_Java多线程 执行程序(1)

本文由作者收集整理所得,作者不保证内容的正确行,转载请标明出处。作者:关新全Java多线程执行程序(1)1.1Thread类static Thread.currentThread返回当前正在执行的线程对象的引用。join 等待线程终止。yield 暂停当前正在执行的线程对象&#…

LeetCode 531. 孤独像素 I

文章目录1. 题目2. 解题1. 题目 给定一幅黑白像素组成的图像, 计算黑色孤独像素的数量。 图像由一个由‘B’和‘W’组成二维字符数组表示, ‘B’和‘W’分别代表黑色像素和白色像素。 黑色孤独像素指的是在同一行和同一列不存在其他黑色像素的黑色像素。 示例: 输入: [[W,…

LeetCode 533. 孤独像素 II

文章目录1. 题目2. 解题1. 题目 给定一幅由黑色像素和白色像素组成的图像, 与一个正整数N, 找到位于某行 R 和某列 C 中且符合下列规则的黑色像素的数量: 行R 和列C都恰好包括N个黑色像素。列C中所有黑色像素所在的行必须和行R完全相同。 图像由一个由‘B’和‘W…

Windows 8桌面的尴尬

刚出炉的Windows8可谓荣宠极致,此时却被指出存在问题,面临失宠的尴尬。到底是什么问题呢? Windows 8中新的用户界面,已被完全证明是两级分化日益严重。  混合操作系统是一个新的GUI概念,友好地触摸界面接口&#xff…

LeetCode 1101. 彼此熟识的最早时间(排序+并查集)

文章目录1. 题目2. 解题1. 题目 在一个社交圈子当中,有 N 个人。每个人都有一个从 0 到 N-1 唯一的 id 编号。 我们有一份日志列表 logs,其中每条记录都包含一个非负整数的时间戳,以及分属两个人的不同 id,logs[i] [timestamp,…

【转载】世界各地对BI的应用状况

欧美企业对商务智能的应用 商务智能活动在美国和欧洲比在世界上任何其他地区都要发达,商务智能已经由“旁门左道”转变为“主门正道”。欧美的企业已经认识到商务智能的重要意义,因而对它寄予很高的期望,希望能够通过商务智能充分利用企业以往…

php gearman 扩展,Ubuntu 12.04 安装 gearman 以及php扩展安装脚本

#!/usr/bash#create by lhb#date 2014-05-07#desc install gearman and php extension for Ubuntu 12.04.4 LTS PHP 5.5apt-get update#安装依赖库apt-get install libboost-all-dev gperf libevent1-dev libcloog-ppl0mkdir -pv /home/lhb/software && cd /home/lhb/s…

LeetCode 379. 电话目录管理系统(哈希set)

文章目录1. 题目2. 解题1. 题目 设计一个电话目录管理系统,让它支持以下功能: get: 分配给用户一个未被使用的电话号码,获取失败请返回 -1check: 检查指定的电话号码是否被使用release: 释放掉一个电话号码,使其能够重新被分配 …

LeetCode 250. 统计同值子树(递归)

文章目录1. 题目2. 解题1. 题目 给定一个二叉树,统计该二叉树数值相同的子树个数。 同值子树是指该子树的所有节点都拥有相同的数值。 示例: 输入: root [5,1,5,5,5,null,5]5/ \1 5/ \ \5 5 5 输出: 4来源:力扣(LeetC…

php 函数报错,PHP报错函数error_reporting()怎么用?

PHP中,报错函数error_reporting()用于规定应该报告何种PHP错误,语法“error_reporting(level)”;使用该函数可以设置在脚本运行时的错误级别,如果没有设置可选参数level,则仅返回当前的错误报告级别。推荐:…

LeetCode 426. 将二叉搜索树转化为排序的双向链表(BST中序循环遍历)

文章目录1. 题目2. 解题1. 题目 将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 。 对于双向循环列表,你可以将左右孩子指针作为双向循环链表的前驱和后继指针,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。 …

LeetCode 285. 二叉搜索树中的顺序后继(中序遍历)

文章目录1. 题目2. 解题1. 题目 给你一个二叉搜索树和其中的某一个结点,请你找出该结点在树中顺序后继的节点。 结点 p 的后继是值比 p.val 大的结点中键值最小的结点。 示例 1: 输入: root [2,1,3], p 1 输出: 2 解析: 这里 1 的顺序后继是 2。 请注意 p 和…

LeetCode 510. 二叉搜索树中的中序后继 II(查找右子树或者祖父节点)

文章目录1. 题目2. 解题1. 题目 给定一棵二叉搜索树和其中的一个节点 node ,找到该节点在树中的中序后继。 如果节点没有中序后继,请返回 null 。 一个结点 node 的中序后继是键值比 node.val大所有的结点中键值最小的那个。 你可以直接访问结点&…

一个关于Remoting的简单例子

前言 今天在整理以前写的一些demo,看到一个关于remoting的例子。好久不用remoting了,果断记录一下。 什么是Remoting 简单回顾下: 1.Remoting是一种远程通信,或者说跨应用程序(域)通信的技术,在C/S架构的程…

php mqtt qos,Mqtt Qos 深度解读

1.QoS含义 :Quality of Service,服务质量2.作用域发布者的Qos订阅者的Qos3.等级与作用level 0:最多一次的传输level 1:至少一次的传输,(鸡肋)level 2: 只有一次的传输4.交互过程qos0对于qos1而言,对于clien…

LeetCode 1502. 判断能否形成等差数列

文章目录1. 题目2. 解题1. 题目 给你一个数字数组 arr 。 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。 …