Я пытаюсь написать почтовую утилиту, которая помещает почту в очередь, и позже она используется потоком потребителя.
Я пытаюсь реализовать типичный шаблон производитель-потребитель, но что-то идет не так.
Я только что написал скелет, и он работает не так, как ожидалось.
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