转自: 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();
}
}
相关推荐
在`Producer`和`Consumer`线程的交互过程中,可能还会用到阻塞队列(如`java.util.concurrent`包中的`BlockingQueue`接口)等高级并发工具,它们内置了线程同步机制,可以简化代码并提高性能。 总结来说,这个...
在Java编程领域,多线程是一项关键技能,它允许程序同时执行多个任务,提升系统效率。本示例探讨的是一个经典的问题模型——生产者消费者问题。这个问题是并发编程中的一个典型场景,它模拟了实际生产环境中的供求...
public class ProducerConsumer { private Object resource = null; private boolean available = false; public synchronized void produce() { while (available) { try { wait(); } catch ...
(注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...
根据给定文件的信息,我们...线程同步是Java多线程编程中的重要概念之一,它能够帮助我们解决多线程环境中可能出现的各种问题,如竞态条件、死锁等。掌握线程同步的方法和技术对于开发高效、稳定的并发程序至关重要。
本篇内容将围绕Java线程的基础知识、创建方式、生命周期以及线程同步等核心概念进行深入探讨。 #### 一、Java线程基础知识 1. **线程与进程的区别**:线程是进程中可独立调度和执行的基本单元,而进程则是资源分配...
`ManualResetEvent`是.NET Framework提供的一种线程同步原语,用于控制线程的执行顺序和互斥访问,确保程序的正确性和一致性。 `ManualResetEvent`类属于`System.Threading`命名空间,它是`WaitHandle`类的一个子类...
在IT领域,尤其是在软件开发中,多线程...总之,通过深入研究和实践这些VC++多线程实例,开发者能够更好地理解和掌握如何在Windows环境下创建高效、安全的多线程应用程序,这对于优化系统性能、改善用户体验至关重要。
- **线程安全**:由于多个线程将访问同一个消费者实例,必须确保代码是线程安全的,尤其是在调用`consumer.poll()`方法时,该方法用于从Kafka拉取新消息。 - **线程协调**:使用多线程时,需要协调每个线程的消费...
本文将深入探讨Java多线程编程的基础知识,包括线程的创建、同步、通信以及相关实例。 一、线程的创建 在Java中,有两种主要的创建线程的方式: 1. 继承Thread类:创建一个新的类,继承自Thread类,然后重写它的...
3. `Producer.java`: 这个文件可能包含了生产者线程的实现。生产者线程会不断地生成数据(在这种情况下可能是事件对象),然后调用`EventStorage`的`put()`方法将数据放入队列。为了防止无限制地生成数据导致队列...
当你调用一个线程实例的 start() 方法的时候,这个时候线程进入就绪状态,注意并不是运行状态,当虚拟机开始分配给他 CPU 的运行时间片的时候线程开始进入运行状态,当线程进入等待状态,例如等待某个事件发生的时候...
在这个实例中,我们可以通过在`Producer`和`Consumer`线程的共享代码段添加`synchronized`关键字或者使用`ReentrantLock`来解决不同步问题。这样,每当一个线程在执行关键操作时,其他线程会被阻塞,直到该线程完成...
1. 等待/通知(Wait/Notify)模式:它是Java中线程协作最基础的模式,允许线程之间通过等待和通知机制来实现同步。 2. 管道流(Piped Streams)模式:允许两个线程通过输入输出流进行通信,适用于线程间需要传递...
在Java编程中,多线程是一种重要的技术,它...这是一个基础但非常实用的例子,有助于理解多线程环境中的同步和协作。在实际应用中,可以根据需求调整队列大小、生产速度和消费速度,以适应不同的系统负载和性能要求。
这个压缩包文件“kafka_Demo”显然提供了一个单线程的Kafka应用示例,非常适合初学者理解和学习如何在Java环境中操作Kafka。 首先,我们要了解Kafka的基本概念。Kafka是一个高吞吐量、低延迟的消息队列系统,由...
在Java或者其他支持多线程的编程语言中,生产者与消费者问题通常通过线程同步机制来解决,如互斥锁(Mutex)、信号量(Semaphore)或条件变量(Condition)。在这个模型中,"生产者"线程负责生成数据并将数据放入...
- 在主类`ProducerConsumer`中,创建了`Producer`和`Consumer`的实例,并分别用`Thread`启动。这样,生产者和消费者就可以并发地运行,但受到同步方法的限制,以遵循模式规则。 5. **注意事项**: - `wait()`和`...
ProducerConsumer 模型是计算机科学中的一个经典设计模式,它主要解决了多线程环境下的资源同步和通信问题。在 C# 中,我们可以利用 .NET Framework 提供的并发和线程管理工具来实现这个模型。本项目 "Producer...
Java多线程中的生产者-消费者模式是一种典型的同步与协作模型,它用于解决在多线程环境下资源的有效利用和协调问题。在这个模式中,通常有两个角色:生产者和消费者。生产者负责创建产品,而消费者则负责消费这些...