使用多线程的消费者-生产者问题
Consumer-Producer Problem using multi-threading
我对线程还很陌生,只是想掌握 basics.I 试图实现消费者-生产者问题。
谁能帮我写代码。
import java.util.ArrayList;
import java.util.List;
public class T
{
public static void main(String[] args) {
ConsumeProduce consumeproduce = new ConsumeProduce();
C c=new C();
P p=new P();
c.start();
p.start();
consumeproduce.printList();
}
}
class C extends Thread
{
public void run()
{
ConsumeProduce consumeproduce =new ConsumeProduce();
try
{
consumeproduce.consume();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class P extends Thread
{
public void run()
{
ConsumeProduce consumeproduce =new ConsumeProduce();
try {
consumeproduce.produce();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ConsumeProduce
{
static int i=5;
public List list =new ArrayList<>(10);
synchronized void consume() throws InterruptedException
{
while(i>0)
{
wait();
list.remove(i);
System.out.println("removed"+i);
i--;
notifyAll();
}
}
synchronized void produce() throws InterruptedException
{
while(i<=10)
{
wait();
i++;
list.add(i, 1);
System.out.println("added"+i);
notifyAll();
}
}
void printList()
{
for (Object i:list)
{
System.out.println(i);
}
}
}
我无法弄清楚我的 code.Any 有什么问题需要帮助。
class C 和 class P 中的 ConsumeProduce 类型的对象是同一 class 的不同实例,彼此之间一无所知。尝试通过 P 和 C 构造函数传递 ConsumeProduce 的单个实例。
我对线程还很陌生,只是想掌握 basics.I 试图实现消费者-生产者问题。
谁能帮我写代码。
import java.util.ArrayList;
import java.util.List;
public class T
{
public static void main(String[] args) {
ConsumeProduce consumeproduce = new ConsumeProduce();
C c=new C();
P p=new P();
c.start();
p.start();
consumeproduce.printList();
}
}
class C extends Thread
{
public void run()
{
ConsumeProduce consumeproduce =new ConsumeProduce();
try
{
consumeproduce.consume();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class P extends Thread
{
public void run()
{
ConsumeProduce consumeproduce =new ConsumeProduce();
try {
consumeproduce.produce();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ConsumeProduce
{
static int i=5;
public List list =new ArrayList<>(10);
synchronized void consume() throws InterruptedException
{
while(i>0)
{
wait();
list.remove(i);
System.out.println("removed"+i);
i--;
notifyAll();
}
}
synchronized void produce() throws InterruptedException
{
while(i<=10)
{
wait();
i++;
list.add(i, 1);
System.out.println("added"+i);
notifyAll();
}
}
void printList()
{
for (Object i:list)
{
System.out.println(i);
}
}
}
我无法弄清楚我的 code.Any 有什么问题需要帮助。
class C 和 class P 中的 ConsumeProduce 类型的对象是同一 class 的不同实例,彼此之间一无所知。尝试通过 P 和 C 构造函数传递 ConsumeProduce 的单个实例。