我正在尝试编写一个邮件实用程序,它将邮件放置在一个队列中,并且之后被消费者线程使用。实现生产者消费者模式
我想实现一个典型的生产者 - 消费者模式,但出了问题。
我刚刚写了一个骷髅,骨架没有按预期工作。
MailProducer.java
public class MailProducer implements Callable<Void>
{
@Override
public Void call() throws Exception
{
System.out.println("inside mail Producer");
System.out.println("Thread executing = " +
Thread.currentThread().getName());
return null;
}
}
MailConsumer.java
public class MailConsumer implements Callable<Void>
{
@Override
public Void call() throws Exception
{
System.out.println("inside mail consumer");
System.out.println("Thread executing = " +
Thread.currentThread().getName());
return null;
}
}
最后执行人
MailExecutor.java
public class MailExecutor
{
private static final int NTHREADS = 25;
private static final ExecutorService exec =
Executors.newFixedThreadPool(NTHREADS);
public static void main(String[] args)
{
exec.submit(new MailConsumer());
exec.submit(new MailProducer());
System.out.println("inside main");
}
}
现在,当我运行该程序时,我期望它来回生产者和消费者继续打印在各个类别中编写的内容。但是,相反,程序在打印下面的行后挂起/不执行任何操作。出了什么问题?我错过了什么吗?
输出 ...(输出是不是我的预料。这是怎么回事了?)
inside mail consumer
inside main
Thread executing = pool-1-thread-1
inside mail Producer
Thread executing = pool-1-thread-2
没什么大不了的,但是阻塞方法实际上是put()和take()。如果没有空间,优惠将返回false。 – devo
@ user529734相当如此! thx - 已更正。 – Bohemian