Домой Учебники по Java и J2EE ArrayBlockingQueue Vs. Пример неблокирующей EvictingQueue для Google Guava

ArrayBlockingQueue Vs. Пример неблокирующей EvictingQueue для Google Guava

782
0

Параллельность очень удивительна в 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 вашего проекта.

pom.xml

1
2
3
4
5
< зависимость >
< groupId > ком . Google. гуава < / groupId >
< artifactId > guava < / artifactId >
< версия > 19.0 < / версия >
< / зависимость >

Что такое ArrayBlockingQueue?

Это blocking , bounded (Фиксированный размер) очередь, которая хранит элементы внутри массива. Это CAN'T хранить unlimited количество элементов. Эта очередь упорядочивает элементы FIFO (первым пришел — первым вышел) .

Read more : Пример синглтон-очереди

Давайте начнем на примере

  1. Создать ArrayBlockingQueue с размером 10
  2. Создать EvictingQueue с размером 10
  3. Попробуйте добавить 15 элементов в очередь
  4. Для EvictingQueue — он не выдаст ошибку
  5. Для ArrayBlockingQueue — будет выбрасывать Queue Full ошибка
CrunchifyArrayBlockingQueueVsEvictingQueue.java

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 ) ;
}
}

Результат:

Результат CrunchifyArrayBlockingQueueVsEvictingQueue

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 )
ArrayBlockingQueue Vs. Пример неблокирующей EvictingQueue для Google Guava

0.00 (0%) 0 votes

ЧИТАТЬ ТАКЖЕ:  Java: HashSet против TreeSet - разница между HashSet и TreeSet в Java

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь