`

java基础之线程同步实例之Producer与Consumer

 
阅读更多

转自: http://blog.csdn.net/liuyu832/article/details/6287159

 

 

class Producer implements Runnable{
 
 Message ms =new Message();
 int i = 0;
 
 Producer(Message ms){
  this.ms = ms;
 }
 
 public void run(){
  while(true){
   if(i > 10){
    break;
   }else{ 
    System.out.println("Producer set :"+i);
    ms.setMessage(i);
   
    i++;
   }
  }
 }
}

class Consumer implements Runnable{
 
 Message ms =new Message();
 
 Consumer(Message ms){
  this.ms = ms;
 }
 
 public void run(){
  while(true){
   if(ms.i >= 10){
    System.out.println(" is over!..");
    break;
   }
   try{
    Thread.sleep(100);
   }catch(Exception e){
    e.getStackTrace();
   } 
   int i = this.ms.getMessage();
   System.out.println("Consumer get :"+i);
  }
 }
}

class Message{
 public int i;
 synchronized int getMessage(){
  notify();
  return this.i; 
 }
 
 synchronized void setMessage(int i){
  this.i = i;
  try{
   wait();
  }
  catch(Exception e){
   e.printStackTrace();
  }
 }
}

/* (1)调用wait()和notify()方法需要注意 方法调用者都是同一个对象;
 (2)一定要用 synchronized(){}实现同步;*/
public class Main {
 public static void main(String[] args){
  Message ms = new Message();
  Producer p = new Producer(ms);
  Consumer c = new Consumer(ms);
  Thread t1 = new Thread(p);
  Thread t2 = new Thread(c);
  t1.start();
  t2.start();
 }
}

分享到:
评论

相关推荐

    java 多线程交互简单范例

    在`Producer`和`Consumer`线程的交互过程中,可能还会用到阻塞队列(如`java.util.concurrent`包中的`BlockingQueue`接口)等高级并发工具,它们内置了线程同步机制,可以简化代码并提高性能。 总结来说,这个...

    Producer产生一个数字而Consumer消费这个数字.rar_java 多线程_producer.java_生产者消费者_

    在Java编程领域,多线程是一项关键技能,它允许程序同时执行多个任务,提升系统效率。本示例探讨的是一个经典的问题模型——生产者消费者问题。这个问题是并发编程中的一个典型场景,它模拟了实际生产环境中的供求...

    java线程Thread的实例

    public class ProducerConsumer { private Object resource = null; private boolean available = false; public synchronized void produce() { while (available) { try { wait(); } catch ...

    java多线程设计模式详解(PDF及源码)

    (注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...

    Java软件开发实战 Java基础与案例开发详解 12-4 线程的同步 共15页.pdf

    根据给定文件的信息,我们...线程同步是Java多线程编程中的重要概念之一,它能够帮助我们解决多线程环境中可能出现的各种问题,如竞态条件、死锁等。掌握线程同步的方法和技术对于开发高效、稳定的并发程序至关重要。

    Java线程讲解Java线程讲解

    本篇内容将围绕Java线程的基础知识、创建方式、生命周期以及线程同步等核心概念进行深入探讨。 #### 一、Java线程基础知识 1. **线程与进程的区别**:线程是进程中可独立调度和执行的基本单元,而进程则是资源分配...

    C#线程同步ManualResetEvent

    `ManualResetEvent`是.NET Framework提供的一种线程同步原语,用于控制线程的执行顺序和互斥访问,确保程序的正确性和一致性。 `ManualResetEvent`类属于`System.Threading`命名空间,它是`WaitHandle`类的一个子类...

    10个VC++多线程操作实例源代码.RAR

    在IT领域,尤其是在软件开发中,多线程...总之,通过深入研究和实践这些VC++多线程实例,开发者能够更好地理解和掌握如何在Windows环境下创建高效、安全的多线程应用程序,这对于优化系统性能、改善用户体验至关重要。

    kafka demo ,两种线程消费方式

    - **线程安全**:由于多个线程将访问同一个消费者实例,必须确保代码是线程安全的,尤其是在调用`consumer.poll()`方法时,该方法用于从Kafka拉取新消息。 - **线程协调**:使用多线程时,需要协调每个线程的消费...

    java多线程编程起步

    本文将深入探讨Java多线程编程的基础知识,包括线程的创建、同步、通信以及相关实例。 一、线程的创建 在Java中,有两种主要的创建线程的方式: 1. 继承Thread类:创建一个新的类,继承自Thread类,然后重写它的...

    producer-consumer问题的分析和讨论

    3. `Producer.java`: 这个文件可能包含了生产者线程的实现。生产者线程会不断地生成数据(在这种情况下可能是事件对象),然后调用`EventStorage`的`put()`方法将数据放入队列。为了防止无限制地生成数据导致队列...

    java 线程初学者资料

    当你调用一个线程实例的 start() 方法的时候,这个时候线程进入就绪状态,注意并不是运行状态,当虚拟机开始分配给他 CPU 的运行时间片的时候线程开始进入运行状态,当线程进入等待状态,例如等待某个事件发生的时候...

    Java线程间通信不同步问题原理与模拟实例

    在这个实例中,我们可以通过在`Producer`和`Consumer`线程的共享代码段添加`synchronized`关键字或者使用`ReentrantLock`来解决不同步问题。这样,每当一个线程在执行关键操作时,其他线程会被阻塞,直到该线程完成...

    java多线程设计模式详解

    1. 等待/通知(Wait/Notify)模式:它是Java中线程协作最基础的模式,允许线程之间通过等待和通知机制来实现同步。 2. 管道流(Piped Streams)模式:允许两个线程通过输入输出流进行通信,适用于线程间需要传递...

    java多线程例子-生产者消费者

    在Java编程中,多线程是一种重要的技术,它...这是一个基础但非常实用的例子,有助于理解多线程环境中的同步和协作。在实际应用中,可以根据需求调整队列大小、生产速度和消费速度,以适应不同的系统负载和性能要求。

    单线程Kafka代码实例

    这个压缩包文件“kafka_Demo”显然提供了一个单线程的Kafka应用示例,非常适合初学者理解和学习如何在Java环境中操作Kafka。 首先,我们要了解Kafka的基本概念。Kafka是一个高吞吐量、低延迟的消息队列系统,由...

    生产者与消费者实例代码,线程学习必备

    在Java或者其他支持多线程的编程语言中,生产者与消费者问题通常通过线程同步机制来解决,如互斥锁(Mutex)、信号量(Semaphore)或条件变量(Condition)。在这个模型中,"生产者"线程负责生成数据并将数据放入...

    java多线程之消费者生产者模式.pdf

    - 在主类`ProducerConsumer`中,创建了`Producer`和`Consumer`的实例,并分别用`Thread`启动。这样,生产者和消费者就可以并发地运行,但受到同步方法的限制,以遵循模式规则。 5. **注意事项**: - `wait()`和`...

    ProducerConsumer-CSharp:C# 制作的 ProducerConsumer Demo

    ProducerConsumer 模型是计算机科学中的一个经典设计模式,它主要解决了多线程环境下的资源同步和通信问题。在 C# 中,我们可以利用 .NET Framework 提供的并发和线程管理工具来实现这个模型。本项目 "Producer...

    Java多线程 生产者-消费者模式

    Java多线程中的生产者-消费者模式是一种典型的同步与协作模型,它用于解决在多线程环境下资源的有效利用和协调问题。在这个模式中,通常有两个角色:生产者和消费者。生产者负责创建产品,而消费者则负责消费这些...

Global site tag (gtag.js) - Google Analytics