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

java多线程编程系列-基础2-线程sleep()和wait()的使用

    博客分类:
  • java
 
阅读更多

我们在平时在学习的过程中都会看到sleep()和wait()的使用。

sleep()表示的是睡觉,就是按时间的不执行,然后时间到了就可以执行了。(当然也也可以被中断的)。

wait()也表示睡觉,但是是睡觉的等等,别人不叫醒他,它就睡觉下去了。

理解深点的,sleep()用的时候,是不释放对象锁的,而wait()是释放对象锁。这也是为了理解写本笔记的原因。

 

下面请看:

 

有一个公共资源类,两个线程都去调用这个类的一个方法,然后再man方法中进行测试。

 

首先我们来看使用wait()方法:

 

Resource类

 

package enduak;

public class Resoure {

	public synchronized void printMsg (String msg) {
		
		System.out.println(msg);
		
		if (msg.equals("chenwei")) {
			try {
				Thread.sleep(10000) ;
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		System.out.println("-----");
		
		
	}


	
}

 

 线程1

 

package enduak;

public class Thread1 extends Thread{

	private Resoure res = null;
	
	public Thread1(Resoure res) {
		
		this.res = res ;
	}
	
	public void run() {
		
		res.printMsg("chenwei") ;

	}
} 
 

 

线程2

 

package enduak;

public class Thread2 extends Thread{

	private Resoure res = null;
	
	public Thread2(Resoure res) {
		
		this.res = res ;
	}
	
	public void run() {
		
		try {
			Thread.sleep(1000) ;
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		res.printMsg("chenweix") ;
		
		
	}
}

 

main测试类

 

package enduak;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MainApp {

	public static void main(String[] args) {
		
		ExecutorService es = Executors.newCachedThreadPool() ;
		Resoure res = new Resoure();
		Thread1 t1 = new Thread1(res ) ;
		Thread2 t2 = new Thread2(res) ;
		
		es.execute(t1) ;
		es.execute(t2) ;
		
	}
	
}

 

 

测试结果分析:

chenwei (等了好久,才打印出下面的)
-----
chenweix
-----
 

当使用sleep()的时候,线程是占用着资源的,其他的线程是不能用这个资源的,也就是说我们说的不释放对象锁的。

 

-------------------------------------------------

而当我们用wait()的方法的时候:

 

resource类

package enduak;

public class Resoure {

	public synchronized void printMsg (String msg) {
		
		System.out.println(msg);
		
		if (msg.equals("chenwei")) {
			try {
				this.wait() ;
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		System.out.println("-----");
		
		
	}


	
}
 

 

打印结果:

chenwei
chenweix
-----
 

线程还在那里等待着,释放掉了对象锁,其他的线程也可以使用对象的方法了的

 

 

分享到:
评论

相关推荐

    JAVA多线程编程详解-详细操作例子

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类或者实现`Runnable`接口。 1. **继承Thread类*...

    java 多线程编程指南

    在Java编程领域,多线程是一项至关重要的技术,它允许程序同时执行多个任务,从而提高系统效率和响应性。这份“Java多线程编程指南”深入探讨了这一主题,为中级到高级的Java开发者提供了宝贵的资源。 首先,多线程...

    JAVA多线程编程详解-详细操作例子.doc

    总结,Java 多线程编程涉及到线程的创建、状态转换、同步、通信以及线程池的使用等多个方面,理解和掌握这些知识点对于编写高效、安全的多线程程序至关重要。通过合理运用多线程技术,可以提升程序的并发性能,优化...

    java多线程编程实例

    从给定的文件信息中,我们可以提取出关于Java多线程...以上是Java多线程编程的基础知识点,理解这些概念对于开发高效、健壮的多线程应用程序至关重要。通过实际操作和不断实践,可以更深入地掌握Java多线程编程的精髓。

    Java多线程编程总结

    ### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...

    《Java多线程编程实例》随书源码

    在Java编程领域,多线程是一项至关重要的技术,它允许程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度。《Java多线程编程实例》这本书深入浅出地探讨了Java中的多线程编程,通过丰富的实例帮助读者...

    java多线程编程实例 (源程序)

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程可以通过实现Runnable接口或继承Thread类来创建。下面我们将深入探讨Java多线程编程的...

    java多线程编程总结

    ### Java多线程编程总结 #### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的...

    Java多线程干货系列(1)Java多线程基础编程开发技术

    本系列的第1部分将重点介绍Java多线程的基础编程开发技术,旨在帮助开发者掌握多线程的核心概念和实用技巧。 1. **线程的概念**: 线程是操作系统调度的基本单位,它代表了程序执行的流程。在一个进程中可以有多个...

    JAVA线程高级-线程按序交替执行

    在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...

    Java多线程编程实战指南 设计模式篇.rar

    在Java编程中,多线程是一项关键技能,它允许程序同时执行多个任务,极大地提高了程序的...通过阅读"Java多线程编程实战指南 设计模式篇.pdf",你将获得更深入的理论知识和实践技巧,为你的编程事业奠定坚实的基础。

    Java多线程文章系列.pdf

    ### Java多线程文章系列知识点概述 #### 一、Java多线程编程...以上是《Java多线程文章系列》的主要知识点概述,涵盖了从多线程的基础概念到高级应用,希望能帮助读者深入理解Java多线程编程的核心技术和实践技巧。

    Java多线程编程要点

    Java多线程编程是开发高并发应用的关键技术之一,它涉及到多个核心概念和方法。本文主要探讨了四个关键要点:Thread和Runnable的认识、Thread的start和run方法的区别、线程状态的说明以及Timer和TimerTask的使用。 ...

    Java多线程编程模板

    在Java编程中,多线程是程序设计中的一个重要概念,特别是在服务器端应用和高并发场景下,多线程能够充分利用CPU资源,提高程序的执行效率。本知识点将深入探讨Java多线程编程模板,帮助开发者理解和掌握如何在Java...

    java多线程经典案例

    通过分析并实践`threadTest`案例,我们可以深入理解Java多线程的原理和使用技巧,为编写高效并发程序打下坚实基础。同时,也要注意多线程编程中的死锁、活锁和饥饿等问题,合理设计线程间的交互,避免出现不可预期的...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    Java多线程编程总结.doc

    Java多线程编程还涉及到线程同步、线程通信、线程状态管理等多个复杂主题,如synchronized关键字、wait()和notify()方法、Thread.join()、Thread.sleep()、线程池等。理解并熟练掌握这些知识点对于编写高效、稳定的...

    java 多线程编程 月食效果

    总结,"java 多线程编程 月食效果"是一个结合了Java多线程、图形编程和天文学知识的项目,它不仅要求开发者具备扎实的编程基础,还需要有良好的问题建模能力和创新思维。通过这个项目,开发者可以提升在并发编程和...

    多线程编程实战指南-核心篇

    总之,《多线程编程实战指南-核心篇》是一本全面解析Java多线程编程的书籍,通过学习,开发者不仅可以掌握多线程编程的基本原理,还能学会如何在实际项目中应用这些知识,提升程序的并发性能和稳定性。对于有一定...

Global site tag (gtag.js) - Google Analytics