`
android_madness
  • 浏览: 38939 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

java多线程 sleep()和wait()的区别(转)

    博客分类:
  • java
阅读更多
相信看这篇文章的朋友都已经知道进程和线程的区别,也都知道了为什么要使用多线程了。

这两个方法主要来源是,sleep用于线程控制,而wait用于线程间的通信,与wait配套的方法还有notify和notifyAll.

区别一:

sleep是Thread类的方法,是线程用来 控制自身流程的,比如有一个要报时的线程,每一秒中打印出一个时间,那么我就需要在print方法前面加上一个sleep让自己每隔一秒执行一次。就像个闹钟一样。

wait是Object类的方法,用来线程间的通信,这个方法会使当前拥有该对象锁的进程等待知道其他线程调用notify方法时再醒来,不过你也可以给他指定一个时间,自动醒来。这个方法主要是用走不同线程之间的调度的。

区别二 :

关于锁的释放 ,在这里假设大家已经知道了锁的概念及其意义。调用sleep方法不会释放锁(自己的感觉是sleep方法本来就是和锁没有关系的,因为他是一个线程用于管理自己的方法,不涉及线程通信)

JDK 7 中的解释:

“public static void sleep(long millis)

throws InterruptedException
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers.The thread does not lose ownership of any monitors.

public final void wait() throws InterruptedException
Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object. In other words, this method behaves exactly as if it simply performs the call wait(0).The current thread must own this object's monitor. The thread releases ownership of this monitor and waits until another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method the notifyAll method. The thread then waits until it can re-obtain ownership of the monitor and resumes execution.“
调用wait方法会释放当前线程的锁(其实线程间的通信是靠对象来管理的,所有操作一个对象的线程是这个对象通过自己的wait方法来管理的,就好像这个对象是电视机,三个人是三个线程,那么电视机的遥控器就是这个锁,假如现在A拿着遥控器,电视机调用wait方法,那么A就交出自己的遥控器,由jVM虚拟机调度,遥控器该交给谁。)【我想到一个好玩的例子:如果A拿遥控器的期间,他可以用自己的sleep每隔十分钟调一次电视台,而在他调台休息的十分钟期间,遥控器还在他的手上~】

区别三:

使用区域

由于wait函数的特殊意义,所以他是应该放在同步语句块中的,这样才有意义 。

注意:两个方法都需要抛出异常

个人见解:有sleep和wait的第二个区别,引起了我对Java线程机制的一个疑问,目前还没有看过JDk这方面的源码(其实看了,是木有看懂),线程的同步管理,是不是由对象在调度,如果是对象在调度,那么JDK 1.5新引入的ReentrantLock机制就比synchronized关键字更值得提倡。因为他更能反映出这么一个机制来。好多人不能理解wait和sleep的区别,我认为就是因为synchronized关键字的影响。当然自己还不懂JAVA的线程具体实现,留作疑问以后有时间继续研究吧
分享到:
评论

相关推荐

    Java线程中sleep和wait的区别详细介绍

    Java中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行

    java 多线程设计模式 进程详解

    《JAVA多线程设计模式》PDF 下载 《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口...

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    Java线程中wait、await、sleep、yield、join用法汇总,文章里面总结了这些关键字的用法,并且里面带有源码帮助分析用法,此一文就可以理解这些关键字用法,推荐拥有

    java多线程示例

    Java中的多线程有三种实现方式: 1.继承Thread类,重写run方法。Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start方法。 2.实现Runnable接口,并...

    计算机后端-Java-Java核心基础-第20章 多线程 16. sleep()和wait()的异同.avi

    计算机后端-Java-Java核心基础-第20章 多线程 16. sleep()和wait()的异同.avi

    java多线程设计模式

    java多线程设计模式 线程的创建和重起 线程的同步 wait/notify/sleep机制 Worker Pattern

    Java多线程教程吐血整理干货.md

    sleep方法和wait方法的区别 stop,suspend,resume等方法为什么会被遗弃 interrupt,interrupted,isInterrupted方法区别 join方法 yield方法 多线程 进程和线程 进程与线程最主要的区别是它们是操作系统管理资源的不同...

    Java 多线程

    详细解说了Java开发语言中多线程中sleep()与wait()的区别、联系。

    Java多线程问题

    1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 2)在Java中Lock接口比synchronized块的优势是什么? 3)在java中wait和sleep方法的不同?

    讲给女朋友听的java多线程(2万字深入理解多线程,有实例代码辅助理解)

    读完本文大概需要30分钟左右,本文有大量的实例代码和典型例题帮助大家理解java多线程。虽然多线程比较难以理解,仅靠一篇文章恐怕搞不定。但读完本文最起码能让你搞懂java多线程的70%以上,至于熟练运用,还是得...

    多线程,高并发.pdf

    2. sleep() 和 wait() 有什么区别? 3. 同步和异步有何异同,在什么情况下分别使用他们? 4. 当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其它方法? 5. 简述 synchronized 和 java...

    php多进程框架-模拟java多线程接口simple-fork-php.zip

    SimpleFork提供一套类似于JAVA多线程的进程控制接口,提供回收、同步、互斥、通信等方案,开发者可以关注业务问题,不需要过多考虑进程控制。 引入 composer require jenner/simple_fork require path/to/...

    Java线程中yield与join方法的区别

    之前,我讨论了一个wait()和sleep()方法区别的问题,这一次,我将会讨论join()和yield()方法的区别。坦白的说,实际上我并没有用过其中任何一个方法,所以,如果你感觉有不恰当的地方,请提出讨论。  Java线程调度...

    JAVA多线程技术分享-39页PPT(winding)

    分享的多线程技术不是告诉你什么是线程,线程的状态,而是我们在开发中容易踩的坑,受过的伤害。我不会告诉你什么是爱情,但是我会告诉你爱过。 一 基础: 1,Thread.sleep(0)的作用 2,为什么线程会带来性能问题 3...

    java7源码-thread:多线程相关的学习

    Java多线程 [TOC] 线程状态 1.New:尚未启动的线程的线程状态 2.Runnable:可运行线程的线程状态,等待CPU调度 3.Blocked:线程阻塞等待监视器锁定的线程状态 4.Waiting:等待线程的线程状态(wait、join、park) 5....

    CoreJava面试题汇总.html

    CoreJava面试题总结。 1 常用的集合有哪些?为什么这么用? 2 静态变量和成员变量的区别 3 filter过滤器用过么,一般用在什么地方? 4 多线程一般用在什么地方?...12 wait sleep的区别? 13 start run区别?

    java笔试题大集合及答案(另附各大公司笔试题)

    61、sleep() 和 wait() 有什么区别? 答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类...

    Java常见面试题208道.docx

    41.sleep() 和 wait() 有什么区别? 42.notify()和 notifyAll()有什么区别? 43.线程的 run()和 start()有什么区别? 44.创建线程池有哪几种方式? 45.线程池都有哪些状态? 46.线程池中 submit()和 execute()方法有...

    多线程,高并发.zip

    1. stop() 和 suspend() 方法为何不推荐使用? 反对使用 stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象 处于一种不连贯状态,那么其他线程能在那种状态下...2. sleep() 和 wait() 有什么区别?

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【多线程】sleep()和wait()分别是哪个类的方法,有什么区别? 79 【多线程】sleep()和yield()的区别 79 【多线程】对synchronized理解?用在代码块和方法上有什么区别? 80 【多线程】Volatile的理解 82 【*多线程】...

Global site tag (gtag.js) - Google Analytics