Содержание
Параллельность очень удивительна в Java. java.util.concurrent Пакет содержит множество утилит, которые мы могли бы использовать различными способами.
В этом уроке мы рассмотрим разницу между java.util.concurrent.ArrayBlockingQueue а также com.google.common.collect.EvictingQueue ,
Что такое EvictingQueue?
EvictingQueue это часть Google's Guava library , Который является non-blocking , bounded (Фиксированный размер) очередь, которая автоматически removes элементы из head очереди при попытке добавить элементы в full queue ,
Как добавить библиотеку Google Guava в ваш проект eclipse-java?
Вы можете добавить ниже зависимости maven в файл pom.xml, если вы используете проект maven. В случае non-maven проект — вы должны скачать его отсюда и включить библиотеку в classpath вашего проекта.
|
1
2
3
4
5
|
< зависимость >
< groupId > ком . Google. гуава < / groupId >
< artifactId > guava < / artifactId >
< версия > 19.0 < / версия >
< / зависимость >
|
Что такое ArrayBlockingQueue?
Это blocking , bounded (Фиксированный размер) очередь, которая хранит элементы внутри массива. Это CAN'T хранить unlimited количество элементов. Эта очередь упорядочивает элементы FIFO (первым пришел — первым вышел) .
Read more : Пример синглтон-очереди
Давайте начнем на примере
- Создать ArrayBlockingQueue с размером 10
- Создать EvictingQueue с размером 10
- Попробуйте добавить 15 элементов в очередь
- Для EvictingQueue — он не выдаст ошибку
- Для ArrayBlockingQueue — будет выбрасывать
Queue Fullошибка
|
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
|
пакет crunchify. ком . учебник ;
импорт Java . Util. Очередь ;
импорт Java . Util. одновременно. ArrayBlockingQueue ;
импорт ком . Google. общий. собирать. EvictingQueue ;
/ **
* @author Crunchify.com
*
* /
общественности учебный класс CrunchifyArrayBlockingQueueVsEvictingQueue {
общественности статический недействительным main ( Строка [ ] аргументы ) {
// Проверка EvicktingQueue с размером 10
CrunchifyEvictingQueue ( ) ;
log ( / n ============= Новая строка ============== / n ) ;
// Тест ArrayBlockingQueue с размером 10
CrunchifyArrayBlockingQueue ( ) ;
}
частный статический недействительным CrunchifyArrayBlockingQueue ( ) {
ArrayBlockingQueue < String > crunchifyQueue знак равно новый ArrayBlockingQueue < String > ( 10 ) ;
строка crunchifyMsg знак равно Это ArrayBlockingQueue — от Crunchify ;
пытаться {
// цикл 15 раз — ошибка, когда очередь заполнена
за ( int я знак равно 1 ; я < = 15 ; я ++ ) {
crunchifyQueue . добавить ( crunchifyMsg + я ) ;
log ( ArrayBlockingQueue size: + crunchifyQueue . размер ( ) ) ;
}
} ловить ( Исключение е ) {
log ( / nException произошла: ) ;
эл . printStackTrace ( ) ;
}
}
частный статический недействительным CrunchifyEvictingQueue ( ) {
Очередь < String > crunchifyQueue знак равно ВыселениеQueue . создать ( 10 ) ;
строка crunchifyMsg знак равно «Это EvictingQueue — от Crunchify» ;
пытаться {
// Мы зациклились 15 раз — без ошибок после заполнения очереди.
// Вместо этого он удалит элемент из очереди в порядке FIFO
за ( int я знак равно 1 ; я < = 15 ; я ++ ) {
crunchifyQueue . добавить ( crunchifyMsg + я ) ;
log ( EvictingQueue size: + crunchifyQueue . размер ( ) ) ;
}
} ловить ( Исключение е ) {
log ( «Произошло исключение:» + е ) ;
}
}
частный статический недействительным log ( Строка crunchifyText ) {
Система. вне. println ( crunchifyText ) ;
}
}
|
Результат:
|
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
|
Размер выселения : 1
Размер выселения : 2
Размер выселения : 3
Размер выселения : 4
Размер выселения : 5
Размер выселения : 6
Размер выселения : 7
Размер выселения : 8
Размер выселения : 9
Размер выселения : 10
Размер выселения : 10 < == Тот же размер
Размер выселения : 10
EvictingQueue размер : 10
EvictingQueue размер : 10
EvictingQueue размер : 10
============= новый ЛИНИЯ ==============
ArrayBlockingQueue size : 1
ArrayBlockingQueue size : 2
ArrayBlockingQueue size : 3
ArrayBlockingQueue size : 4
ArrayBlockingQueue size : 5
ArrayBlockingQueue size : 6
ArrayBlockingQueue size : 7
ArrayBlockingQueue size : 8
ArrayBlockingQueue size : 9
ArrayBlockingQueue size : 10
Возникло исключение :
Java. яз. IllegalStateException : Очередь заполнена
в Яве . Util. АннотацияВопрос . добавить ( AbstractQueue . Java : 98 )
в Яве . Util. одновременно. ArrayBlockingQueue . добавить ( ArrayBlockingQueue . Java : 312 )
в crunchify. ком . учебник . CrunchifyArrayBlockingQueueVsEvictingQueue . CrunchifyArrayBlockingQueue ( CrunchifyArrayBlockingQueueVsEvictingQueue . Java : 33 )
в crunchify. ком . учебник . CrunchifyArrayBlockingQueueVsEvictingQueue . main ( CrunchifyArrayBlockingQueueVsEvictingQueue . java : 23 )
|
0.00 (0%) 0 votes







