`
jy02149522
  • 浏览: 47679 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

JAVA线程 wait,nodify理解测试

    博客分类:
  • JAVA
阅读更多

下面我们通过一个例子来理解和学习关于JAVA线程 wait() nodify()。

先说说例子的整体思路和角色介绍,有一个仓库里面装着产品,有专门管销售的,有专门管生产的。

生产的和销售的都对应这个仓库,生产部的生产出一件产品就往仓库仍一件,销售的需要产品了,就直接上仓库拿去。

当销售部的去仓库拿货发现没有货了,就通知销售部门的人,都别来拿货了(wait()),当生产部生产出一定量的产品后

通知销售的,有货了去拿货吧(nodify())。然后就这样一直反复的生产和销售着。

好了,事情的来龙去脉已经搞清楚了。

这件事情有3个角色,仓库,销售部,生产部。下面来看代码吧。

仓库类

package thread;

/**
 * 仓库类
 */
public class ArrayBuffer {
	
	// 产品的数量
	public int pnum=0;
    
    /**
     * 增加产品数量
     * @param value
     * @throws InterruptedException
     */
    public synchronized void put(int value)throws InterruptedException{
    	System.out.println("生产了一件产品 当前库存:" + ++pnum);
    }
    
    /**
     * 减少产品数量
     * @return
     * @throws InterruptedException
     */
    public synchronized int get() throws InterruptedException{
    	
        if(pnum==0){
        	System.out.println("没有货了,停止销售。");
           wait();
           return 0;
        }
        
       this.notify();
       System.out.print("正在销售了一件产品");
       System.out.println("销售了一件产品...当前库存:" + --pnum);
       return 1;
    }

}

 生产类

package thread;

/**
 * 生产类
 */
public class Producer extends Thread{
	
    private ArrayBuffer c;
    public Producer(ArrayBuffer cc){
        this.c=cc;
    }
    
    public void run() {
        int i;
        for(i=0;true;i++){
            try {
            	Thread.sleep(500); //生产速度
                c.put(i);
             if(c.pnum >= 20) //货源到达一定数时 通知开始销售
                synchronized (c) {
                	c.notify();
                }
              
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
      
    }

}

 

销售类

package thread;

/**
 * 销售类
 */
public class Consumer extends Thread{
	
    private ArrayBuffer c;
    
    public Consumer(ArrayBuffer cc){
        this.c=cc;
       
    }
    
    public void run(){
        int i;
        for(i=0;true;i++){
            try {
            	
            	Thread.sleep(300); //销售速度
            	c.get();
            	
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

 

主的运行类,启动这套业务。

package thread;

/**
 * @author Administrator
 * wait , nodify方法的 理解测试。 一个生产和销售的例子
 * 销售线程 发现库存没货时 使用wait方法 将锁释放,这时候生产线程独立运行,当生产数达到20
 * 后,使用nodify方法 唤醒销售线程继续销售。
 */
public class MyPcTest {
	public static void main(String args[]) throws InterruptedException {
        ArrayBuffer c=new ArrayBuffer();
        Producer p=new Producer(c);
        p.setName("生产");
        Consumer consumer=new Consumer(c);
        consumer.setName("销售");
        p.start();
        consumer.start();
       
    }
}

 

1
0
分享到:
评论

相关推荐

    Java线程状态流转图

    Java线程状态流转图知识点总结 Java线程状态流转图是一种用于描述Java线程生命周期中不同的状态和状态...通过了解Java线程状态流转图,我们可以更好地理解Java线程的生命周期,并提高Java多线程编程的效率和可靠性。

    java线程安全测试

    总之,理解Java内存模型和掌握线程安全策略对于开发高效、可靠的并发程序至关重要。开发者应始终关注线程安全,确保在多线程环境下代码的正确性和稳定性。在实际项目中,可以参考提供的"ThreadSaft"文件中的测试例子...

    Java线程详解大全

    总之,Java线程是并发编程的基础,理解和掌握线程的生命周期、实现方式和同步机制对于编写高效、安全的多线程程序至关重要。在实际应用中,根据需求选择合适的线程实现策略,并结合同步机制,可以有效地利用系统资源...

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

    以上就是对Java线程中wait、await、sleep、yield、join用法的总结。这些方法在实际开发中,对于控制多线程运行的时序和协调非常关键。理解这些方法的正确使用方式是掌握Java并发编程的基础。同时,使用时需特别注意...

    JAVA多线程测试工具

    Java多线程测试工具在软件开发中扮演着至关重要的角色,尤其在性能优化和系统压力测试方面。本文将深入探讨Java多线程测试工具的重要性和使用,以"JMeter"为例,来阐述如何通过此类工具进行高效的压力测试和系统瓶颈...

    Java多线程wait和notify

    在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...

    java线程深入解析

    Java线程的深入理解和熟练掌握是Java程序员必备的技能,它涉及到程序的性能优化、并发控制和安全性,是开发复杂多线程应用的基础。在实际开发中,合理使用线程同步机制和理解线程调度原理,可以有效避免死锁、活锁等...

    java 线程 dump 分析工具 2.3.3

    Java的TDA线程转储分析器是一个用于分析Sun Java VM生成的线程转储和堆信息的小型Swing GUI(目前用1.4测试)。它从提供的日志文件中解析线程转储和类直方图。它提供关于发现的线程转储的统计信息,提供关于锁定监视器...

    java线程与协程效果对比

    线程间的通信主要依赖于共享内存和线程同步机制,如`synchronized`关键字、`wait()`, `notify()` 和 `notifyAll()` 方法。虽然线程可以充分利用多核处理器的优势,但线程切换带来的开销(上下文切换)以及可能出现的...

    浅谈java多线程wait,notify

    在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地理解和掌握这两个机制。 wait机制 在Java中,wait机制用于暂停当前线程的执行,并释放当前对象的锁,以便让其他线程获得锁并...

    JAVA线程学习(源代码)

    在Java中,线程间的通信可以通过wait()、notify()和notifyAll()方法实现,这些方法需要在synchronized代码块或方法中调用,以确保线程安全。另外,`java.util.concurrent`包中的BlockingQueue是一个高效的线程间通信...

    java多线程测试实例

    Java多线程是Java编程中的重要组成部分,尤其在并发编程领域,它扮演着...这个"java多线程测试实例"可能包含了上述部分或全部知识点的实际应用,通过下载并分析实例代码,可以加深对Java多线程编程的理解和实践能力。

    电子书《java线程》

    《Java线程》这本书是Java开发人员深入理解并发编程的重要参考资料。Java作为一种广泛使用的编程语言,其并发处理能力是高效程序设计的关键。本电子书详细介绍了如何在Java环境中有效地使用多线程,优化程序性能,并...

    Java线程学习和总结

    本文将深入探讨Java线程的核心概念、API以及在实际开发中的应用,旨在帮助你理解和掌握这一关键技能。 首先,我们需要了解什么是线程。在单核CPU系统中,线程是操作系统调度的基本单位,而在多核CPU系统中,每个...

    关于线程(java)两天的课件

    线程在Java编程中扮演着至关重要的角色,它是程序中的执行单元,允许应用程序同时执行多个任务。本课程将深入探讨线程的基础知识,包括如何创建线程、理解线程的状态以及如何有效地管理线程资源,特别是通过线程池来...

    java线程与并发编程实践

    本书《java线程与并发实践编程》由Jeff Friesen撰写,2017年2月出版,提供了关于Java线程API和并发工具的详细指南,帮助开发者深入理解和应用这些关键概念。 首先,Java线程是程序执行的独立路径,每个线程都有自己...

    论文研究-Java多线程测试策略及测试方法探讨.pdf

    在分析Java 多线程特性的基础上, 探讨了Java 多线程的测试策略及测试方法, 提出Java 多线程测试由类测试、集成模块测试和系统测试三个层次组成, 并讨论了多线程的继承测试、同步测试以及效率测试。

    java线程.rar

    Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是通过类`Thread`或实现`Runnable`接口来创建和管理的。Java线程模型是基于操作系统的原生...

    Java多线程测试程序,

    在本项目中,“Java多线程测试程序”利用了这一特性,结合图形用户界面(GUI)框架JFrame,实现了企鹅在界面上的动态移动效果。 首先,我们来深入理解Java多线程。在Java中,每个运行的程序都有一个主线程,而多...

    Java线程培训资料

    ### Java线程培训资料知识点详解 #### 一、Java线程基本概念 ...通过以上知识点的学习,可以深入理解Java线程的基本概念、API使用以及Concurrent包中的高级特性,这对于开发高效、稳定的多线程应用程序至关重要。

Global site tag (gtag.js) - Google Analytics