最近有小伙伴在工作中遇到了java线程阻塞问题,面对这样的问题,大家束手无策,不知道从何下手,那么今天我们就给大家分享一些关于java避免线程阻塞的方法。

阻塞指的是暂停一个Java线程同步的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定已经很熟悉了。Java

提供了大量方法来支持阻塞,下面让我们逐一分析。

1. sleep() 方法:sleep() 允许指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU 时

间,指定的时间一过,线程重新进入可执行状态。典型地,sleep() 被用在等待某个资源就绪的情形:测试发现条件不满足后,让线程阻塞一段时间后重新

测试,直到条件满足为止。

2. suspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进

入阻塞状态,并且不会自动恢复,必须其对应的resume() 被调用,才能使得线程重新进入可执行状态。典型 地,suspend() 和 resume()

被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果 后,调用 resume() 使其恢复。

3. yield() 方法:yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU

时间。调用 yield() 的效果等价于调度程序认为该Java线程同步已执行了足够的时间从而转到另一个线程。

4. wait() 和 notify() 方法:两个方法配套使用,wait() 使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的

一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时Java线程同步重新进入可执行状态,后者则必须对应 的

notify() 被调用。

其实遇到这样的问题大家不必慌张,知道其发生的原理以及原因,然后做出解决方法就可以了。最后大家如果想要了解更多java常见问题知识,敬请关注奇Q工具网。

推荐阅读:

java 分析 线程堵塞 原因_java如何避免线程阻塞?相关方法解析相关推荐

  1. 查看java线程堵塞排查_java线程阻塞问题排查

    我开发的worker,每隔几个月线上都会阻塞一次,一直都没查出问题.今天终于了了这个心结.把解决过程总结下和大家分享. 首先用jstack命令打出这个进程的全部线程堆栈.拿到线程dump文件之后,搜索 ...

  2. 如何查找历史线程阻塞原因_java并发编程-线程状态,线程阻塞方式,阻塞中的线程如何终止?...

    前面的例子通过volatile boolean来让任务终止,那么如果任务阻塞了? 如何终止它?本文来看下,参考think in java . 线程的状态 1.new:线程创建后的短暂状态,其分配系统资 ...

  3. java多线程优先级的方法_Java多线程以及线程优先级

    文章目录 1 继承Thread类多线程的实现获取和设置线程名称线程优先级 2 实现Runnable接口3 实现Callable接口4 使用线程池 1 继承Thread类 多线程的实现 实现多线程只需要 ...

  4. java结束全部操作代码_Java基本的线程操作(附代码)

    啦啦啦啦,从头整理一遍java并发的内容.开始是基本的线程操作 线程状态切换: 新建线程: @Testpublic voidnewTread(){ Thread t1= new Thread(newR ...

  5. java线程池并发_Java并发教程–线程池

    java线程池并发 Java 1.5中提供的最通用的并发增强功能之一是引入了可自定义的线程池. 这些线程池使您可以对诸如线程数,线程重用,调度和线程构造之类的东西进行大量控制. 让我们回顾一下. 首先 ...

  6. java线程interrupt用法_Java 如何中断线程

    本篇文章帮大家学习java 如何中断线程,包含了Java 如何中断线程使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 以下实例演示了如何使用interrupt()方法来中 ...

  7. java中实现线程的方法_Java中实现线程的方法

    Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 第一种:继承Thread类 new Thread(){}.start();这表示调 ...

  8. java运行速度慢的原因_java运行速度慢的原因 | 学步园

    1)java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然后java虚拟机读取该类文件的字节,执行相应操作.而C++编译的时候将程序编译成本地机器码.一般来说java程序执行速度 ...

  9. java线程池教程_Java基础教程——线程池

    启动新线程,需要和操作系统进行交互,成本比较高. 使用线程池可以提高性能-- 线程池会提前创建大量的空闲线程,随时待命执行线程任务.在执行完了一个任务之后,线程会回到空闲状态,等待执行下一个任务.(这 ...

最新文章

  1. Vivado中ASYNC_REG命令讲解
  2. 明确需求与功能,优化小打卡的分享刺激点
  3. mysql jdbc allow_mysql的jdbc.url携带allowMultiQueries=true参数的作用及其原理
  4. Speedment 3.0的新功能
  5. B-JUI文档、下载
  6. 前沿 | 阿里达摩院最牛科技~摄像头ISP处理器,提升夜间识别精准率
  7. Flash 与 JavaScript的交互总结
  8. 问题四十五:怎么画ray tracing图形中的blending and joining surface
  9. 使用ubuntu18搭建nfs分布式文件系统
  10. thinkphp sql查询条件 一个字段多个限制条件
  11. Redis缓存相关问题总结
  12. (XWZ)的python学习笔记——pandas
  13. 前端向后端传参报415_ajax往后台传json格式数据报415错误
  14. 压缩解压缩文件zlib
  15. 简历包装严重,作为面试官,我是如何甄别应聘者的包装程度
  16. Essay-One Piece海贼王每集剧情介绍
  17. 机器学习笔记 - IOU、mAP、ROC、AUC、准确率、召回率、F分数
  18. linux4k分辨率,ubuntu18.04设置支持4k分辨率
  19. Android仿微信朋友圈2自定义点赞评论弹框
  20. 通过BAPI方式展示长文本ADA_POPUP_WITH_TABLE

热门文章

  1. currentRegion
  2. Uncaught TypeError: wave.ensureState is not a function
  3. 【维生素C语言】第一章 - 初识C语言
  4. [转载] Gedit快捷键
  5. 星爷和山哥的聊天记录被我发现
  6. Waymo称已拿到关键性证据,案件审讯或推迟
  7. 易语言api hook CreateFileA
  8. 在网站进行查询时使用分号;和符号分隔参数
  9. gateway sentinel 熔断 不起作用_Sentinel实现熔断与限流 - 魔笔钨丝浣
  10. 3D美术职业晋级之路