-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathConsumer.java
More file actions
91 lines (48 loc) · 3.24 KB
/
Copy pathConsumer.java
File metadata and controls
91 lines (48 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//Neither repented they of their murders, nor of their sorceries, nor of their fornication, nor of their thefts. (Revelation 9:21)
package com.javarush.task.task30.task3003;
import java.util.concurrent.TransferQueue;
public class Consumer implements Runnable {
private TransferQueue<ShareItem> queue;
public Consumer(TransferQueue<ShareItem> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
Thread.sleep(450);
while (!Thread.currentThread().isInterrupted()){
ShareItem item = this.queue.take();
System.out.format("Processing %s%n", item.toString());
}
} catch (InterruptedException e) {
}
}
}
/*
Экономим время
1. Создай Producer и Consumer (См. комментарий к методу main).
2. Создай методы toString, equals и hashCode в классе ShareItem. Для этого в IntelliJ IDEA в теле класса ShareItem выполни:
2.1. Alt+Enter -> toString() -> Enter.
2.2. Alt+Enter -> equals() and hashCode() -> click all 'Next'-s.
2.3. Реализацию методов toString(), equals() и hashCode() оставь такими, какими их сгенерировала IntelliJ IDEA.
3. В Producer и Consumer реализуй метод run так, чтобы вызов метода interrupt прерывал работу consumer и producer трэдов.
4. Реализация метода run для Producer:
4.1. Используя метод offer добавь в очередь 9 ShareItem-ов с такими параметрами: ("ShareItem-N", N), где N - номер элемента от 1 до 9.
4.2. Перед каждым добавлением выведи фразу "Элемент 'ShareItem-N' добавлен". Используй System.out.format.
4.3. Усыпи трэд на 0.1 секунды.
4.4. Если у очереди есть Consumer, не занятый работой, то выведи фразу "Consumer в ожидании!".
Просмотри методы интерфейса TransferQueue, там есть нужный метод.
5. Реализация метода run для Consumer:
5.1. Усыпи трэд на 0.45 секунды.
5.2. В бесконечном цикле забери элемент из очереди методом take и выведи в консоль "Processing item.toString()".
6. Сверь вывод с файлом output.txt.
7. Стек-трейс не выводи в консоль.
8. Для вывода любой информации на экран используй System.out.format.
Требования:
1. Создай класс Producer.
2. Создай класс Consumer.
3. В классе ShareItem должны быть созданы методы: toString(), equals(Object) и hashCode().
4. Метод run() класса Producer должен быть реализован согласно условию задачи.
5. Метод run() класса Consumer должен быть реализован согласно условию задачи.
6. Вывод должен совпадать с файлом output.txt.
*/