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.");
}
}拳头,我运行该应用程序之后,我点击调试工具中的“停止”按钮来停止应用程序。这使得两个“奇怪的类型输出”:
这是第一次应用程序运行的输出:
这是第二次应用程序运行的输出:
为什么我们有两个重复的输出行:“put:13177”
为什么我们有两个重复的输出行:“got:2713”。
那个结果让我感到困惑!有些身体可以帮助我理解这个问题!
感谢先进。
java点击按钮结线程_多线程的Java应用程序在调试工具Netbeans中单击“停止”按钮时输出一个奇怪的结果...相关推荐
- JAVA-多线程 三 {多线程状态}JAVA从基础开始 -- 3
JAVA-多线程 三 {多线程状态}(JAVA从基础开始 -- 3 线程状态 停止方法_stop (舍弃) 休眠状态_sleep 线程礼让_yield 线程强制执行_ join 线程状态观测_Thre ...
- java线程的创建线程_多线程(Thread、线程创建、线程池)
第1章 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序, ...
- 虚拟机实现java线程_深入理解java虚拟机(23):java与多线程
线程有以下三种实现方式 1.使用内核线程方式实现,优点内核完成线程切换和操纵调度器进行调度,并且负责将线程任务映射到处理器上.程序一般不使用内核线程会使用一种轻量级进程,轻量级进程与内核线程一对一模型 ...
- java并行流 阻塞主线程_多线程入门案例与java8的并行流
java8 实例请移步https://www.cnblogs.com/ngLee/p/14021859.html 进程与线程 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 多线程的创建方式 ...
- future.cancel不能关闭线程_多线程与高并发笔记
1. 创建线程的四种方式 实现Runnable 重写run方法 继承Thread 重写run方法 线程池创建 Executors.newCachedThreadPool() 实现Callable接口 ...
- java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?
java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...
- c++thread里暂停线程_多线程技术
1.程序 程序(Program)"是一个静态的概念,一般对应于操作系统中的一个可执行文件,比如:我们要启动酷狗听音乐,则对应酷狗的可执行程序.当我们双击酷狗,则加载程序到内存中,开始执行该程 ...
- auto.js停止所有线程_多线程快速入门(二)及面试题
获取线程对象以及名称 常用线程api方法 start()启动线程 currentThread()获取当前线程对象 getID()获取当前线程ID Thread-编号 该编号从0开始 getName() ...
- java显示多个地区时钟_妙用Java多线程机制实现多个时区时钟显示
妙用Java多线程机制实现多个时区时钟显示 [摘要]在许多公共场合下,需要提供时钟显示,如机场.火车站.汽车站.酒店等,特别是一些需要接待外宾的场所,处理显示本地区时间以外还必须显示其他时区时间.本文 ...
最新文章
- C++开源跨平台类库集
- Pytorch中用于深度学习常见的激活函数
- 蓝桥杯:基础练习 回文数
- 工业互联网 — 5G 边缘计算与 IIoT
- app测试流程和重点_APP开发测试流程是怎么样的?
- netbeans html 格式化,在NetBeans IDE8.0中怎么把html的文件转换成jsp格式
- CS231n Convolutional Neural Networks for Visual Recognition------Numpy Tutorial
- 最优化学习笔记(一)预备知识
- luogu_1495【题解】中国剩余定理
- Linear Regression Using Least Squares Method 代码实现
- python原理_强化学习:原理与Python实现
- 解析button和input type=”button”的区别
- jsp获取相对路径网址的方法 request.getContextPath()
- html二维数组查找车票,火车票售票系统
- 自己整理的申论知识体系梳理分享
- html计算梯形的面积,梯形的面积计算
- mediawiki mysql配置_MediaWiki 搭建与配置使用
- 【计算机网络】网关和路由器功能的有哪些不同
- 电脑同时连接有线和无线网络怎么设置有线网络优先
- 安卓逆向007之安卓系统架构