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基础】线程阻塞的方法相关推荐

  1. JAVA中线程同步的方法(7种)汇总

    JAVA中线程同步的方法(7种)汇总 同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法. ...

  2. Java 基础 —— 线程安全

    一.线程安全问题 线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的 ...

  3. java基础 ArrayList集合基本方法演示

    java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator;public class ArrayLis ...

  4. java基础线程_Java基础之多线程没那么复杂!

    多线程的引入 1.什么是多线程 线程是程序执行的一条路径,一个进程中可以包含多条线程;多线程并发执行可以提高程序的效率 2.进程和线程之间的关系 操作系统可以同时执行多个任务,每个任务就是进程;进程可 ...

  5. java基础----线程

    一.进程与线程 进程(process)是一个可并发执行的具有独立功能的程序(program)关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位. 线程(thread)是操作系统进 ...

  6. Java基础——线程及并发机制

    前言 在Java中,线程是一个很关键的名词,也是很高频使用的一种资源.那么它的概念是什么呢,是如何定义的,用法又有哪些呢?为何说Android里只有一个主线程呢,什么是工作线程呢.线程又存在并发,并发 ...

  7. java判断线程阻塞_记一次锁使用不当导致Dubbo线程阻塞问题

    背景 线上环境一个后台项目,提供基于dubbo实现的事件分发服务,最近突然出现心跳超时. 问题分析 检查内存是否溢出 jstat -gcutil 8166 1000 意料之中,内存正常,因为内部有接入 ...

  8. java基础 - 线程

    5.线程 进程:是正在运行的程序. 是系统进行资源分配和调用的独立单位. 每一个进程都有它自己的内存空间和系统资源. 线程:是进程中的单个顺序控制流,是一条执行路径. 单线程:一个进程如果只有一条执行 ...

  9. Java基础——线程基础

    线程相关概念 程序 程序就是为完成特定任务.用某种语言编写的一组指令的集合.简单来说就是我们写的代码. 进程 进程是指运行中的程序,比如我们打开一个应用,就是启动了一个进程,操作系统就会为该进程分配内 ...

  10. java thread exit方法_实例分析Java终止线程和stop()方法

    Java终止线程实例和stop()方法源码阅读 了解线程 概念 线程 是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 线程特点 拥有状态,表示线程的状态,同一时刻中,JVM中 ...

最新文章

  1. Tree-Structured LSTM模型
  2. 优化函数式编程:向 PHP 移植 Clojure 函数
  3. 计算机科学讨论,第七章计算机科学讨论报告
  4. Spring3整合Ibatis3配置
  5. 《复杂》读书笔记(part2)--混沌与逻辑斯蒂映射
  6. [Qt入门]QTableWidget控件创建
  7. lnmp测试php,php ,nginx 搭建负载均衡lnmp,小白测试
  8. 【转】Java 单例模式详解
  9. EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET
  10. 快递官网漏洞泄露 1400 万用户信息
  11. Hexo NexT主题添加点击爱心效果
  12. 某度质量部测试开发面试题2(未完待续)
  13. python3 数据结构_Python3数据结构
  14. 在国外用什么app软件听歌 解除网易云音乐地区限制
  15. mysql的应用领域_面向应用领域的数据库新技术汇总(干货)
  16. EXCEL,锁定单元格后往下拉,但后面需要继续复制粘贴时又希望步锁定,该怎么办?小技巧,先把$ 替换为空后再粘贴
  17. Ubuntu16.4打开优盘的错误,unnable to access
  18. 零基础也能看懂的五大网络安全技术,学网络真的可以很简单
  19. web单页面应用与多页面应用区别
  20. 企业中台最佳实践--阿里数据中台最佳实践(九)

热门文章

  1. MySQL之查看数据库(SHOW DATABASES语句)
  2. 【雕爷学编程】Arduino动手做(118)---PS2接口模块
  3. 开源框架面试之Spring MVC面试题目
  4. 关于VOV8订单类型有关PO的几个字段设置说明
  5. EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续
  6. 耦合和内聚-图解7种耦合关系
  7. 基于HTTP协议的开源中文分词系统:HTTPCWS 1.0.0 发布
  8. MATLAB——偏最小二乘回归算法
  9. linux 怎么看当前时间,Linux 查看当前时间和修改系统时间(示例代码)
  10. 视频教程-血腥大地-第二季(资源破解与管理)-其他