java 线程中断 阻塞_java – 线程中断没有结束阻塞调用输入流...

2023-11-17

我正在使用RXTX从串口读取数据.读取是在以下列方式生成的线程内完成的:

CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(port);

CommPort comm = portIdentifier.open("Whatever", 2000);

SerialPort serial = (SerialPort)comm;

...settings

Thread t = new Thread(new SerialReader(serial.getInputStream()));

t.start();

SerialReader类实现Runnable并且只是无限循环,从端口读取并将数据构建到有用的包中,然后再将其发送到其他应用程序.但是,我把它简化为以下简单:

public void run() {

ReadableByteChannel byteChan = Channels.newChannel(in); //in = InputStream passed to SerialReader

ByteBuffer buffer = ByteBuffer.allocate(100);

while (true) {

try {

byteChan.read(buffer);

} catch (Exception e) {

System.out.println(e);

}

}

}

当用户单击停止按钮时,将触发以下功能,理论上应关闭输入流并中断阻塞byteChan.read(缓冲)调用.代码如下:

public void stop() {

t.interrupt();

serial.close();

}

但是,当我运行此代码时,我从未得到ClosedByInterruptException,一旦输入流关闭,它应该触发.此外,执行阻止调用serial.close() – 因为底层输入流仍然在读取调用上阻塞.我已经尝试用byteChan.close()替换中断调用,然后应该导致AsynchronousCloseException,但是,我得到了相同的结果.

对我所缺少的任何帮助将不胜感激.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 线程中断 阻塞_java – 线程中断没有结束阻塞调用输入流... 的相关文章

  • 每日一题:序列操作

    序列操作 题目 Daimayuan Online Judge 没啥思路 如果暴力的话肯定会超时 太难了太难了 参考了题解想了好久才弄懂 该题是思维题 操作1是将第x个数变为y 输入的时候就可以修改值了 毕竟只要一个语句就行 每次操作都是将x
  • seata 1.4.2 执行seata-server.bat报错:Could not create connection to database server.

    seata 1 4 2 执行seata server bat报错 18 40 17 778 ERROR tionPool Create 343563528 com alibaba druid pool DruidDataSource cre
  • 网络整理续

    计算机网络简答题 1 TCP 协议和 UDP 协议的区别有哪些 1 TCP 属于面向连接的协议 UDP 属于面向无连接的协议 2 TCP 可以保证数据可靠 有序的传输 可以进行流量控制 UDP 无法实现 3 TCP 协议有效载荷小于 UDP
  • Linux下20个常用Linux性能监控工具/命令

    此文章不作为商业用途 纯粹的用来学习 20个常用Linux性能监控工具 命令 对于 Linux Unix 系统管理员非常有用的并且最常用的20个命令行系统监视工具 这些命令可以在所有版本的 Linux 下使用去监控和查找系统性能的实际原因
  • vscode实用快捷键查找和替换

    vscode是一款功能十分强大的编辑器 且带有许多插件 利用插件可以让开发速度提升几倍甚至几十倍 vscode快捷键 查找 单文件查找 ctrl F 替换 单文件内替换一处 crtl shift 1 单文件内替换全部 ctrl alt en
  • mybatis-plus中wrapper的用法(详细)

    用到了wrapper ge le ne eq等的用法 及多表查询自写sql整理资料记录一下 以备后续复习 目录 可点击相应目录直接跳转 一 条件构造器关系介绍 条件构造器关系介绍 wapper介绍 二 项目实例 1 根据主键或者简单的查询条
  • 优秀程序员和一般程序员有什么区别?

    优秀程序员和一般程序员有什么区别 为什么有的人一入职就能平步青云 而有的人入职很久却一直在原地打转 程序员的职场进阶之路到底有多少门道 今天 我们邀请到了前Google Top Performer 来Offer的闫老师 给大家分享一下他的职
  • gitlab CI/CD系列之使用 GitLab Runner注册和基本环境配置

    由于很多时候我们的环境搭建都是在已经在对应的设备上搭建完成 或者是我们直接使用一个配置好的docker容器 开机自动启动 作为ci cd的运行环境 所以为了便利性这里主要使用的是shell模式 简介 理解了上面的基本概念之后 有没有觉得少了
  • netty-all 简介、中文文档、中英对照文档 下载

    netty all 文档 下载链接 含jar包 源码 pom 组件名称 中文 文档 下载链接 中英对照 文档 下载链接 netty all 4 0 50 Final jar netty all 4 0 50 Final API文档 中文版
  • 头歌实践教学平台数据结构与算法:02线性表

    针对数据结构02线性表在头歌平台练习过程中的完成代码 关卡数目较多 每题思路单独在每一关中解释 如有其他需求请留言 第一关 可以把问题转换为 遍历B中的元素 如果该元素不在A中 则把该元素插入到A中 由于集合中的元素没有先后顺序 因此 插入
  • Vue项目之登录注册

    Vue项目之登录注册 1 注册 1 1 注册页面的布局 1 2 注册业务逻辑的实现 2 登录 3 导航守卫 3 1全局导航守卫 全部路由都会经过这里 一定要调用next方法向下执行 3 2 路由独享的导航守卫 3 3 组件内的导航守卫 补充
  • ReactHook RefHook

    1 除了可以进行ref操作以外 还能进行数据存储的操作 即相当于在函数式组件中拥有了this 2 ref的改变不会引起组件的重新渲染 1 引入 import React Component useRef from react 2 使用ref
  • APP 抓包和微信小程序抓包-Charles 的精简使用教程

    APP 抓包和微信小程序抓包 Charles 的精简使用教程 2021 09 25 更新 2019 07 10 更新 目标 教程 一 安装 Charles 二 Charles 简介 1 Charles 欢迎页面 2 基础功能按钮 3 抓包内
  • 可视化爬虫框架spiderflow入门及实战

    官网 点击直达官网 文档 点击查看官网文档 说明 目前官网和文档均无法正常访问 原因未知 参考本文即可 再有问题欢迎留言讨论 以下内容部分来自官网或官网文档 文章比较长 请准备好瓜子和小板凳 TIP 文中用到的网站地址仅为了说明功能 如有侵
  • Android——微信登录、分享

    写在前面的话 应用要接入微信登录 分享 需要在微信的开发者平台上进行提交应用 并且审核通过 应用已经获取到appId 相关jar包下载地址 http download csdn net detail sapce fish 9571142 也
  • 链式栈(c)

    链式栈 在上节我们提到了顺序栈 而链式栈就是把顺序栈用链表的方式来存储 如果对链表和顺序栈的学习较为深刻的话 学习链式栈会非常容易 首先第一步和单链表操作基本相同 创建一个结构体 一块是数据域 另一块是指针域 用来指向下一个元素 typed
  • linux文件夹重命名

    微信可以设置雪花昵称了 真漂亮 在Linux下重命名文件或目录 可以使用mv命令或rename命令 这里分享下二者的使用方法 mv命令既可以重命名 又可以移动文件或文件夹 例子 将目录A重命名为B mv A B 例子 将 a目录移动到 b下
  • tkinter创建子窗口(只创建一个)

    import tkinter as tk 第一种直接写个类 class OneUi def init self master tk Tk self top tk Toplevel master self top geometry 600x4
  • 【直播回顾】5步实现精细化用户触达,助力业务增长

    9月17日 极光BDS产品经理刘基石通过线上直播进行了主题为 如何实现精细化的用户触达 的分享 从 用户触达的大数据 用户触达的 5 个因子 如何实现精细化触达以及精细化触达实例 4个方面 深度分享了极光如何实现精细化的用户触达 助力客户业

随机推荐