`

sleep() 和 wait() 有什么区别..

 
阅读更多

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

下面是说明这个问题的实例:

 

package pack.java.multithread;

public class MultiThread {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//开启线程1;
		new Thread(new Thread1()).start();
		try {
			Thread.sleep(10);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//开启线程二;
		new Thread(new Thread2()).start();
	}
	
	/**
	 * 线程一;
	 * @author zhouhaitao
	 * 2012-2-12
	 */
	private static class Thread1 implements Runnable{
		public void run() {
			// TODO Auto-generated method stub
			synchronized(MultiThread.class){
				System.out.println("线程1-是等待状态...");
				try {
					//等待状态;释放对象锁.给其他线程执行的机会;
					MultiThread.class.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("线程1-执行完成!");
			}
		}
	}
	
	private static class Thread2 implements Runnable{

		public void run() {
			// TODO Auto-generated method stub
			synchronized (MultiThread.class) {
				System.out.println("线程2-通知其他线程可以释放等待状态...");
				//调用notify方法不释放锁;
				MultiThread.class.notify();
				
				//休眠10毫秒;给其他线程执行机会.
				try {
					Thread.sleep(10);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				System.out.println("线程2-执行完成!");
			}
		}
	}
}

 

 

输出结果:

线程1-是等待状态...
线程2-通知其他线程可以释放等待状态...
线程2-执行完成!
线程1-执行完成!

分享到:
评论

相关推荐

    Sleep和Wait的区别.pdf

    ### Sleep与Wait的区别详解 #### 一、基本概念 在多线程编程中,`sleep`和`wait`是两个非常重要的方法,用于控制线程的执行和协调多个线程之间的交互。理解这两个方法的不同之处对于正确实现多线程程序至关重要。 ...

    sleep() 方法和wait()方法的区别.docx

    sleep() 方法和 wait() 方法的区别 sleep() 方法和 wait() 方法都是 Java 中的线程控制方法,但是它们有着本质的区别。下面是对这两种方法的详细比较和分析。 sleep() 方法 sleep() 方法是 Thread 类的静态方法,...

    java sleep和wait的解惑.docx

    在Java多线程编程中,`Thread.sleep()` 和 `Object.wait()` 是两个非常重要的方法,它们分别位于 `Thread` 类和 `Object` 类中,用于控制线程的行为。本文将深入探讨这两个方法的区别以及它们在实际开发中的应用场景...

    java中yieldsleep以及wait的区别.pdf

    总结来说,`yield()`、`sleep()`和`wait()`在多线程编程中各有其作用和限制。`yield()`是轻量级的让步,`sleep()`用于短时间的暂停,而`wait()`则涉及线程间的同步和通信。理解这些方法的正确使用是编写高效并发程序...

    C#中sleep和wait的区别分析

    `Sleep` 和 `Wait` 是两个常用的方法,它们都可以让线程暂停执行,但它们的使用场景和机制有着本质的区别。 首先,`Sleep` 方法是定义在 `System.Threading.Thread` 类中的,它允许程序员指定一个时间段,在这个...

    wait和sleep的区别.pdf

    流媒体知识核心概念中提到的视频封装格式和视频压缩编码标准,以及wait和sleep的区别,以下是相关的知识点: 首先,视频封装格式和视频压缩编码标准是构建流媒体技术的两大核心组件。 视频封装格式是一种存储视频...

    多线程sleep,yield,wait区别

    理解它们的区别有助于编写出更加高效和可控的多线程程序。 1. **sleep() 方法** - `Thread.sleep(millisecond)` 方法来自 `java.lang.Thread` 类,它使当前正在执行的线程暂停指定的毫秒数,并将线程的执行权交还...

    sw.rar_C++里面的wait_c++ sleep wait_c++ sleep与wait_c++ wait_sleep w

    介绍c++ 里sleep和wait的区别,很详细的 。。

    深入理解Wait、Notify和Wait与sleep区别

    `wait()`, `notify()`和`notifyAll()`与`sleep()`的主要区别在于: - **权限和锁**:`wait()`, `notify()`和`notifyAll()`需要在同步上下文中使用,而`sleep()`则不需要。 - **资源释放**:`wait()`会释放对象锁,...

    sleep()、wait()、yield()和join()方法特点及区别.docx

    本文将深入探讨Java中的四个关键方法:`sleep()`, `wait()`, `yield()`和`join()`,以及它们各自的特点和区别。 首先,我们来看`sleep()`和`wait()`的区别: 1. **来源不同**:`sleep()`是`Thread`类的方法,它...

    java sleep()和wait()

    虽然`sleep()`和`wait()`都可以使线程进入等待状态,但它们之间存在本质的区别: 1. **锁资源的释放**:`sleep()`不会释放任何锁资源,而`wait()`则会释放当前对象的锁。 2. **线程的唤醒**:`sleep()`方法的线程在...

    JVM线程状态和Thread.sleep的实现原理探究.pdf

    5. IN_OBJECT_WAIT_TIMED - 线程因调用Object.wait(long)而处于带有超时的等待状态。 6. PARKED - 线程通过LockSupport.park()方法被阻塞。 7. PARKED_TIMED - 线程通过LockSupport.park(long)方法被带有超时的阻塞...

    详解Java中的sleep()和wait()的区别

    在Java编程语言中,`sleep()` 和 `wait()` 都是用来控制线程执行的重要方法,但它们的作用和使用场景有着显著的区别。以下是这两个方法的详细解释: 1. **`Thread.sleep(long milliseconds)`** - `sleep()` 方法是...

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

    Java线程中的`sleep()`和`wait()`方法都是在多线程环境中用于控制线程执行的重要工具,但它们之间存在着显著的区别。理解这些差异对于编写高效、正确的并发代码至关重要。 首先,Java的多线程机制基于抢占式模型,...

    详解Java中wait和sleep的区别

    "详解Java中wait和sleep的区别" Java中wait和sleep的区别是Java多线程编程中一个重要的概念。这两个方法都可以用来暂停当前线程的执行,但是它们之间有着根本的区别。 首先,wait()是一个用于线程同步的实例方法...

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

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

    高薪程序员面试题精讲系列63之说说sleep()、yield()、join()、wait()的区别.pdf,这是一份不错的文件

    "高薪程序员面试题精讲系列63之说说sleep()、yield()、join()、wait()的区别" 本资源主要讲解了Java中四个常用的线程控制方法:sleep()、yield()、join()和wait(),它们是Java多线程编程中的重要...

    java核心知识点整理.pdf

    25 3:ServicorTo 和 ServicorFrom 互换................................................................................................................25 2.3.3.1. 2.4.1. 如何确定垃圾 ......................

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

    本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、notifyAll()用法 wait()、notify()和notifyAll()是Object类...

Global site tag (gtag.js) - Google Analytics