`
墙头上一根草
  • 浏览: 154605 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 多线程之wait,notify,sleep,join

    博客分类:
  • java
阅读更多

 java多线程编程离不开锁,和锁管的几个函数有wait,notify,sleep,join等

 

 首先来看这个几个方法的结构以及所在的类

 

 wait和notify以及notifyAll 都是在java的超类Object里面,这样设计的目的,个人见解可能是实现面向对象的需要,把每个对象都放在jvm的等待队列里面

 

  sleep和join  都是在类thread中

 

  作用:

   sleep()方法 : 使当前线程进入停滞状态(阻塞当前线程),让出CUP的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会;
   sleep()是Thread类的Static(静态)的方法;因此他不能改变对象的机锁,所以当在一个Synchronized块中调用Sleep()方法是,线程虽然休眠了,但是对象的机锁并木有被释放,其他线程无法访问这个对象(即使睡着也持有对象锁)。
  在sleep()休眠时间期满后,该线程不一定会立即执行,这是因为其它线程可能正在运行而且没有被调度为放弃执行,除非此线程具有更高的优先级。

 

    wait()方法 : Object类里的方法;当一个线程执行到wait()方法时,它就进入到一个和该对象相关的等待池中,同时失去(释放)了对象的机锁(暂时失去机锁,wait(long timeout)超时时间到后还需要返还对象锁);其他线程可以访问;
  wait()使用notify或者notifyAlll或者指定睡眠时间来唤醒当前等待池中的线程。
  wiat()必须放在synchronized block中,否则会在program runtime时扔出出”java.lang.IllegalMonitorStateException“异常

   

     notify以及notifyAll:唤醒该对象等待池中的对象继续执行工作

     Join:必须在线程调用start方法之后才能调用,不然则不起作用,具体的可以查看jvm的thread的源码,join方法的作用就是等待某个线程的终止

 

    需要注意的是notify和wait的实现,必须有对象锁的实现,不然就会爆出IllegalMonitorStateException异常

 

    以下为用wait以及notify实现的消费者-生产者的例子

 

    /**    
* QueueBuffer.java Create on 2014年8月5日   
*    
* Copyright (c) 2014年8月5日 by dzh
*    
* @author <a href="xingyu@gw.com.cn">xingyu</a>   
* @version 0.0.1
*   
*/
package org.dzh.thread.setAndget;

/**@className:QueueBuffer.java

 * @description:消费池子队列

 * @date 2014年8月5日 下午4:48:26
 */
public class QueueBuffer {

    private int num;
   
    /**是否被设置值*/
    private boolean valueSet = false;
   
    synchronized int get(){
        if(!valueSet){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        valueSet = false;
        notify();
        return num;
    }
   
   
    synchronized void set(int n){
       
        if(valueSet){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        valueSet = true;
        notify();
        this.num = n;
    }
   
}
/**    
* Product.java Create on 2014年8月5日   
*    
* Copyright (c) 2014年8月5日 by dzh
*    
* @author <a href="xingyu@gw.com.cn">xingyu</a>   
* @version 0.0.1
*   
*/
package org.dzh.thread.setAndget;

/**@className:Product.java

 * @description:生产者

 * @date 2014年8月5日 下午4:57:25
 */
    public class Product extends Thread{
       private QueueBuffer qb;
      
        public Product(QueueBuffer qb,String name){
            super(name);
            this.qb = qb;
        }
       
        @Override
        public void run() {
            int num = 1;
           
            for (; ; ) {
                qb.set(num);
                num++;
            }
        }
    }

 

/**    
* Consumer.java Create on 2014年8月5日   
*    
* Copyright (c) 2014年8月5日 by dzh
*    
* @author <a href="xingyu@gw.com.cn">xingyu</a>   
* @version 0.0.1
*   
*/
package org.dzh.thread.setAndget;

/**@className:Consumer.java

 * @description:消费者

 * @date 2014年8月5日 下午4:57:49
 */
public class Consumer extends Thread{
    private QueueBuffer qb;
       
    public Consumer(QueueBuffer qb,String name){
        super(name);
        this.qb = qb;
    }
   
    @Override
    public void run() {
        System.out.println(qb.get());
    }
}

分享到:
评论

相关推荐

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

    在Java编程中,多线程的使用是实现程序并发运行的重要手段。本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、...

    Java多线程知识点总结

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

    java多线程Demo

    在多线程环境下,可能会出现数据竞争问题,为了解决这个问题,Java提供了多种同步机制,如synchronized关键字、wait/notify机制、Lock锁(ReentrantLock)等。synchronized用于控制对共享资源的访问,而wait/notify...

    java多线程经典案例

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    Java多线程技术精讲

    Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...

    Java多线程实现异步调用实例

    在Java编程中,多线程和异步调用是提高应用程序性能和响应能力的重要手段。在本实例中,我们将深入探讨如何使用Java实现多线程以实现异步调用,并理解其背后的机制。 首先,多线程允许一个程序同时执行多个任务。在...

    java多线程示例

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应速度。本示例着重探讨如何在Java中实现和管理多线程,以及它带来的挑战和解决方案。 一、Java多线程基础 1. ...

    java 多线程.ppt,多线程

    为了避免多线程环境下资源竞争导致的数据不一致,Java提供了多种同步机制,包括synchronized关键字、Lock接口、wait()和notify()等。synchronized可以保证同一时间只有一个线程访问临界区,Lock提供更细粒度的锁...

    java多线程源码-source

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。接下来,我们将深入探讨这两个方法以及相关的...

    Java多线程的总结

    Java多线程是Java编程中的一个核心概念,它在现代软件开发中扮演着至关重要的角色。多线程允许程序同时执行多个任务,提高了系统资源的利用率,提升了应用程序的响应速度和并发性能。对于大型分布式系统、Web应用...

    java 多线程编程指南

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

    JAVA多线程模式高清版+DEMO

    Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类或者实现`Runnable`接口。这个压缩包文件"JAVA多...

    深入浅出 Java 多线程.pdf_java_

    Java多线程是Java编程中的核心概念,尤其在如今并发性能至关重要的软件开发中,它的重要性不言而喻。深入理解Java多线程能够帮助开发者有效地利用计算机资源,提高程序的执行效率,优化系统性能。 Java多线程的实现...

    java多线程测试实例

    Java多线程是Java编程中的重要组成部分,尤其在并发编程领域,它扮演着核心角色。在实际项目中,多线程被广泛应用于提高系统效率、实现任务并行处理,以及优化资源利用。以下是对"java多线程测试实例"的详细解析: ...

    Java多线程编程模板

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

    java 多线程

    ### Java多线程知识点详解 #### 一、Java Thread 概念 在Java中,**线程**是一种轻量级的进程,它是程序执行流的最小单元。一个标准的Java应用通常至少包含一个线程,即主(Main)线程。Java支持多线程编程,这...

    java多线程面试题59题集合

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,从而提升系统效率。在面试中,对Java多线程的理解和熟练运用往往成为衡量开发者技能水平的重要标准。以下是对Java多线程面试题59题集合中可能涉及的...

    JAVA多线程学习内容

    线程可以通过sleep()方法进入阻塞状态,通过join()方法让主线程等待子线程完成,通过wait()和notify()或notifyAll()方法进行线程间的同步与通信。 Java提供了多种线程控制机制,如synchronized关键字用于实现互斥...

    Java多线程编程总结

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

Global site tag (gtag.js) - Google Analytics