JAVA怎么中断IO阻塞的线程

JAVA怎么中断IO阻塞的线程,第1张

1、写程序的关键是要有控制流,当程序块中的处理涉及到死循环的时候更要加量的控制。

2、像这种情况,两个步骤,

一,为IO时的创建线程,加一个数量的阈值,超过它后则不再创建。

二,为每个线程设置标志变量标志该线程是否已经束,或是直接加入线程组去管理。

3、回看你的程序需求,明显设计不合理。其实应当创建一个线程池去搞定这个业务需求。

再想想吧。

任何 *** 作系统,在中断服务函数中,都不能阻塞,另外中断服务函数还应该越短越好,主要原因是:

1、 中断服务函数的执行和一般进程执行某个函数时的上下文环境 (context) 是不一样的,是在一个特定的context中,这个环境不许阻塞,否则系统异常。

2、 中断服务函数过长甚至阻塞,会严重影响整个系统运行效率甚至挂死 (想想看,系统无时无刻不在产生各种各样中断, *** 作系统本身的运行也依靠某些精确发生的中断,比如定时器靠时钟中断等,如果某个中断处理函数执行了很长时间 【阻塞可以理解成导致函数执行了无限长的时间】,整个系统就无法正常工作了)

1.运行态:进程当前正在运行,或者正在运行队列中等待调度;

2.暂停状态:即暂停状态,进程的执行被暂停,当进程受到SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU等信号,就会进入暂停状态,知道收到继续执行信号,转变为运行态。

3.可中断阻塞状态:进程处于阻塞状态,正在等待某些事件发生或能够占用某些资源。处于这种状态下的进程可以被信号中断。接收到信号或被显式地唤醒呼叫,进程将转变为运行态,继续排队等待调度;

4.不可中断阻塞状态:此进程状态类似于可中断的阻塞状态,只是他不会处理信号,把信号传递到这种状态下的进程不能改变它的状态,即不可被信号所中断,不能被随便调度。在一些特定的情况下,这种状态是很有用的。只有在它等待的事件发生时,进程才被显示地唤醒呼叫唤醒,进程将转变为运行态,继续排队等待调度;

5.僵尸态:子进程运行结束,父进程尚未使用wait 函数族等系统调用来回收退出状态。处于该状态下的子进程已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出信息供其父进程收集。即进程结束后,内存地址空间被释放、task_struct 成员被释放,但task_struct 这个空壳还存在,它就是僵尸,这个僵尸我们用kill 是杀不掉的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11826995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存