【Java基础】线程阻塞的方法
Thread.sleep()和Object.wait()的区别
(1)Thread.sleep()不会释放占有的锁,Object.wait()会释放占有的锁;
(2)Thread.sleep()必须传入时间,Object.wait()可传可不传,不传表示一直阻塞下去;
(3)Thread.sleep()到时间了会自动唤醒,然后继续执行;
(4)Object.wait()不带时间的,需要另一个线程使用Object.notify()唤醒;
(5)Object.wait()带时间的,假如没有被notify,到时间了会自动唤醒,这时又分好两种情况,一是立即获取到了锁,线程自然会继续执行;二是没有立即获取锁,线程进入同步队列等待获取锁;
其实,他们俩最大的区别就是Thread.sleep()不会释放锁资源,Object.wait()会释放锁资源。
Thread.sleep()和Condition.await()的区别
这个题目的回答思路跟Object.wait()是基本一致的,不同的是Condition.await()底层是调用LockSupport.park()来实现阻塞当前线程的。
Thread.sleep()和LockSupport.park()的区别
(1)从功能上来说,Thread.sleep()和LockSupport.park()方法类似,都是阻塞当前线程的执行,且都不会释放当前线程占有的锁资源;
(2)Thread.sleep()没法从外部唤醒,只能自己醒过来;
(3)LockSupport.park()方法可以被另一个线程调用LockSupport.unpark()方法唤醒;
(4)Thread.sleep()方法声明上抛出了InterruptedException中断异常,所以调用者需要捕获这个异常或者再抛出;
(5)LockSupport.park()方法不需要捕获中断异常;
(6)Thread.sleep()本身就是一个native方法;
(7)LockSupport.park()底层是调用的Unsafe的native方法;
Object.wait()和LockSupport.park()的区别
(1)Object.wait()方法需要在synchronized块中执行;
(2)LockSupport.park()可以在任意地方执行;
(3)Object.wait()方法声明抛出了中断异常,调用者需要捕获或者再抛出;
(4)LockSupport.park()不需要捕获中断异常【本文由公从号“彤哥读源码”原创】;
(5)Object.wait()不带超时的,需要另一个线程执行notify()来唤醒,但不一定继续执行后续内容;
(6)LockSupport.park()不带超时的,需要另一个线程执行unpark()来唤醒,一定会继续执行后续内容;
(7)如果在wait()之前执行了notify()会怎样?抛出IllegalMonitorStateException异常;
(8)如果在park()之前执行了unpark()会怎样?线程不会被阻塞,直接跳过park(),继续执行后续内容;
LockSupport.park()会释放锁资源吗?
不会,它只负责阻塞当前线程,释放锁资源实际上是在Condition的await()方法中实现的。
【Java基础】线程阻塞的方法相关推荐
- JAVA中线程同步的方法(7种)汇总
JAVA中线程同步的方法(7种)汇总 同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法. ...
- Java 基础 —— 线程安全
一.线程安全问题 线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的 ...
- java基础 ArrayList集合基本方法演示
java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator;public class ArrayLis ...
- java基础线程_Java基础之多线程没那么复杂!
多线程的引入 1.什么是多线程 线程是程序执行的一条路径,一个进程中可以包含多条线程;多线程并发执行可以提高程序的效率 2.进程和线程之间的关系 操作系统可以同时执行多个任务,每个任务就是进程;进程可 ...
- java基础----线程
一.进程与线程 进程(process)是一个可并发执行的具有独立功能的程序(program)关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位. 线程(thread)是操作系统进 ...
- Java基础——线程及并发机制
前言 在Java中,线程是一个很关键的名词,也是很高频使用的一种资源.那么它的概念是什么呢,是如何定义的,用法又有哪些呢?为何说Android里只有一个主线程呢,什么是工作线程呢.线程又存在并发,并发 ...
- java判断线程阻塞_记一次锁使用不当导致Dubbo线程阻塞问题
背景 线上环境一个后台项目,提供基于dubbo实现的事件分发服务,最近突然出现心跳超时. 问题分析 检查内存是否溢出 jstat -gcutil 8166 1000 意料之中,内存正常,因为内部有接入 ...
- java基础 - 线程
5.线程 进程:是正在运行的程序. 是系统进行资源分配和调用的独立单位. 每一个进程都有它自己的内存空间和系统资源. 线程:是进程中的单个顺序控制流,是一条执行路径. 单线程:一个进程如果只有一条执行 ...
- Java基础——线程基础
线程相关概念 程序 程序就是为完成特定任务.用某种语言编写的一组指令的集合.简单来说就是我们写的代码. 进程 进程是指运行中的程序,比如我们打开一个应用,就是启动了一个进程,操作系统就会为该进程分配内 ...
- java thread exit方法_实例分析Java终止线程和stop()方法
Java终止线程实例和stop()方法源码阅读 了解线程 概念 线程 是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 线程特点 拥有状态,表示线程的状态,同一时刻中,JVM中 ...
最新文章
- Tree-Structured LSTM模型
- 优化函数式编程:向 PHP 移植 Clojure 函数
- 计算机科学讨论,第七章计算机科学讨论报告
- Spring3整合Ibatis3配置
- 《复杂》读书笔记(part2)--混沌与逻辑斯蒂映射
- [Qt入门]QTableWidget控件创建
- lnmp测试php,php ,nginx 搭建负载均衡lnmp,小白测试
- 【转】Java 单例模式详解
- EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET
- 快递官网漏洞泄露 1400 万用户信息
- Hexo NexT主题添加点击爱心效果
- 某度质量部测试开发面试题2(未完待续)
- python3 数据结构_Python3数据结构
- 在国外用什么app软件听歌 解除网易云音乐地区限制
- mysql的应用领域_面向应用领域的数据库新技术汇总(干货)
- EXCEL,锁定单元格后往下拉,但后面需要继续复制粘贴时又希望步锁定,该怎么办?小技巧,先把$ 替换为空后再粘贴
- Ubuntu16.4打开优盘的错误,unnable to access
- 零基础也能看懂的五大网络安全技术,学网络真的可以很简单
- web单页面应用与多页面应用区别
- 企业中台最佳实践--阿里数据中台最佳实践(九)
热门文章
- MySQL之查看数据库(SHOW DATABASES语句)
- 【雕爷学编程】Arduino动手做(118)---PS2接口模块
- 开源框架面试之Spring MVC面试题目
- 关于VOV8订单类型有关PO的几个字段设置说明
- EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续
- 耦合和内聚-图解7种耦合关系
- 基于HTTP协议的开源中文分词系统:HTTPCWS 1.0.0 发布
- MATLAB——偏最小二乘回归算法
- linux 怎么看当前时间,Linux 查看当前时间和修改系统时间(示例代码)
- 视频教程-血腥大地-第二季(资源破解与管理)-其他