public class HoldIntegerSynchronized
{
private int sharedInt=-1;
private boolean writeable=true;
public synchronized void setSharedInt(int val)
{
while(!writeable)
{
try
{
wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
System.err.println(Thread.currentThread().getName()+
"setting sharedInt to"+val);
sharedInt=val;
writeable=false;
notify();
}
public synchronized int getSharedInt()
{
while(writeable)
{
try
{
wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
writeable=true;
notify();
System.err.println(Thread.currentThread().getName()+
"retrieving sharedInt value"+sharedInt);
return sharedInt;
}
}
public class ConsumeInteger extends Thread
{
private HoldIntegerSynchronized cHold;
public ConsumeInteger(HoldIntegerSynchronized h)
{
super("ConsumeInteger");
cHold=h;
}
public void run()
{
int val,sum=0;
do
{
try
{
Thread.sleep((int)(Math.random()*10000));
}
catch(InterruptedException e)
{
System.err.println(e.toString());
}
val=cHold.getSharedInt();
sum+=val;
}while(val!=10);
System.err.println(getName()+"retrieved values totaling:"+
sum+"\nTerminating "+getName());
}
}
public class ProduceInteger extends Thread
{
private HoldIntegerSynchronized pHold;
public ProduceInteger(HoldIntegerSynchronized h)
{
super("ProduceInteger");
pHold=h;
}
public void run()
{
for(int count=1;count<=10;count++)
{
try
{
Thread.sleep((int)(Math.random()*10000));
}
catch(InterruptedException e)
{
System.err.println(e.toString());
}
pHold.setSharedInt(count);
}
System.err.println(getName()+"finished producing values"+
"\nTermininating "+getName());
}
}
public class SharedCell
{
public static void main(String[] args)
{
HoldIntegerSynchronized h=new HoldIntegerSynchronized();
ProduceInteger p=new ProduceInteger(h);
ConsumeInteger c=new ConsumeInteger(h);
p.start();
c.start();
}
}
分享到:
相关推荐
在`JThreadSynch`这个压缩包文件中,我们可以预见到包含的Java源代码将展示以上的一种或多种机制,通过具体的示例代码来解释和实现生产者消费者问题的线程同步和互斥。通过学习和理解这个示例,开发者可以更好地掌握...
a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题
6. **死锁和饥饿**:在设计生产者-消费者模型时,需要注意避免死锁(两个或多个线程相互等待对方释放资源)和饥饿(某个线程因资源分配不当而永远无法执行)。例如,确保生产者不会无限等待消费者消费,消费者也不会...
生产者-消费者问题是多线程同步的一个经典案例,主要探讨如何在并发环境下,确保生产者进程和消费者进程之间正确地共享资源,避免数据竞争和死锁。在这个问题中,生产者进程负责创建产品并将产品放入缓冲区,而消费...
创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this....
生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区,导致缓冲区的数据混乱和不一致的问题。 在解决生产者-消费者问题时,需要使用同步机制来...
设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区...
6. **线程间的通信**:在生产者和消费者之间,可能还需要额外的信号和槽(signal and slot)来协调他们的操作,比如当缓冲区满时通知生产者停止生产,或者当缓冲区空时通知消费者暂停消费。 通过以上步骤,我们可以...
本实验要求设计在同一个进程地址...生产者线程生产物品时,若无空缓冲区可用,生产者线程必须等待消费者线程释放出一个空缓冲区;消费者线程消费物品时,若缓冲区为空,消费者线程将被阻塞,直到新的物品被生产出来。
总的来说,"线程同步生产者消费者问题"是理解和掌握多线程编程的关键案例。通过这个案例,我们可以深入理解线程间的通信和协作,以及如何有效地使用线程同步机制来管理共享资源。对于开发者来说,掌握这些概念和技巧...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
通过互斥量、事件来解决生产者和消费者的问题,主要涉及的内容有多线程的创建,事件的创建,互斥量的创建,线程的同步。主要的函数有:CreateThread,CreateEvent,CreateMutex,WaitForMultipleObjects等。
在多线程编程中,生产者消费者模型是一种常见的设计模式,用于解决线程间的通信和同步问题。在C#中,我们可以利用各种机制实现这样的队列。本篇将详细讲解如何在C#中构建一个生产消费者队列,以及它如何帮助优化线程...
然后,我们需要创建生产者和消费者线程。每个生产者线程会随机生成产品并调用`produce()`方法,而消费者线程则不断调用`consume()`方法。为了实现多个线程,我们可以使用`Thread`类或者`java.util.concurrent....
另一个是同步信号量,用于控制生产者和消费者的同步。 在VC++环境下,我们可以使用Windows API中的`CreateMutex`和`WaitForSingleObject`等函数来实现互斥,`CreateSemaphore`和`ReleaseSemaphore`函数来实现同步...
线程同步_生产者消费者问题 经典实现 线程同步_生产者消费者问题
1、设计目的:通过研究Linux的进程同步机制和信号量,实现生产者消费者问题的并发控制。 2、说明:有界缓冲区内设有26个存储单元,放入取出的产品设定为26个大写英文字母。 3、设计要求: 1) 生产者与消费者均有二个...
### 多进程同步解决生产者消费者问题(C++源码解析) #### 一、问题背景与定义 生产者-消费者问题是一种经典的并发编程问题,它最初由Edsger Dijkstra提出,用来展示信号量机制的应用场景。在这个问题中,存在两类...
在Java编程中,"线程同步--生产者消费者问题"是一个经典的多线程问题,它涉及到如何有效地在多个线程之间共享资源。这个问题通常用于演示和理解线程间的协作机制,如互斥锁、条件变量等。在此,我们将深入探讨这个...