
Кеш — это область локальной памяти, в которой хранится копия часто используемых данных, которую в противном случае дорого получить или вычислить. Примеры таких данных включают в себя результат запроса к базе данных, файл на диске или отчет.
Вот простой пример Java, который является Threadsafe с использованием HashMap без использования синхронизированных коллекций .
CrunchifyCacheExample.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
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
пакет ком . crunchify. учебные пособия ;
Импортировать Java. Util. ArrayList ;
Импортировать Java. Util. HashMap ;
Импортировать Java. Util. Итератор ;
Импортировать Java. Util. Карта. Вход ;
/ **
* @author Crunchify.com
*
* /
// Создать объект Simple Cache с помощью HashMap …
общественности учебный класс CrunchifyCacheExample < K , T > {
частный долго timeToLive ;
частный HashMap < K , T > cacheMap ;
защищенный учебный класс CrunchifyCacheObject {
общественности долго lastAccessed знак равно Система. currentTimeMillis ( ) ;
общественности строка стоимость ;
защищенный CrunchifyCacheObject ( String ценность ) {
это. значение знак равно стоимость ;
}
}
общественности CrunchifyCacheExample ( long timeToLive , окончательный долго timeInterval , ИНТ макс ) {
это. время жить знак равно время жить * 2000 ;
cacheMap знак равно новый HashMap < K , T > ( макс ) ;
если ( timeToLive > 0 && timeInterval> 0) {
Поток t = новый поток (новый Runnable () {
public void run () {
while (true) {
пытаться {
Thread.sleep (timeInterval * 1000);
} ловить ( InterruptedException ex ) {
}
}
}
} ) ;
т . setDaemon ( true ) ;
т . начало ( ) ;
}
}
// метод PUT
общественности недействительным положить ( K ключ , T ценность ) {
синхронизированный ( cacheMap ) {
cacheMap . положить ( ключ , значение ) ;
}
}
// метод GET
@SuppressWarnings ( не проверено )
общественности T получить ( K ключ ) {
синхронизированный ( cacheMap ) {
CrunchifyCacheObject с знак равно ( CrunchifyCacheObject ) cacheMap . получить ( ключ ) ;
если ( с == ноль )
вернуть ноль ;
еще {
с . lastAccessed знак равно Система. currentTimeMillis ( ) ;
вернуть ( T ) с . стоимость ;
}
}
}
// УДАЛИТЬ метод
общественности недействительным удалить ( строка ключ ) {
синхронизированный ( cacheMap ) {
cacheMap . удалить ( ключ ) ;
}
}
// Получить размер кэша объектов ()
общественности ИНТ размер ( ) {
синхронизированный ( cacheMap ) {
вернуть cacheMap . размер ( ) ;
}
}
// метод CLEANUP
общественности недействительным очистка ( ) {
долго сейчас знак равно Система. currentTimeMillis ( ) ;
ArrayList
синхронизированный ( cacheMap ) {
Итератор > ITR знак равно cacheMap . entrySet ( ) . итератор ( ) ;
DeleteKey знак равно новый ArrayList < String > ( ( cacheMap . Size ( ) / 2 ) + 1 ) ;
CrunchifyCacheObject с знак равно ноль ;
в то время как ( итр . hasNext ( ) ) {
строка ключ знак равно ( Строка ) итр . следующий ( ) ;
с знак равно ( CrunchifyCacheObject ) ((Запись , ?> ) итр ) . getValue ( ) ;
если ( с ! знак равно ноль && (сейчас> (timeToLive + c.lastAccessed))) {
deleteKey.add (ключ);
}
}
}
за ( Строка ключ : deleteKey ) {
синхронизированный ( cacheMap ) {
cacheMap . удалить ( ключ ) ;
}
Thread. yield ( ) ;
}
}
}
|
Еще несколько примеров Java, которые вы можете посмотреть.
Бонус: детали модели памяти Java:

0.00 (0%) 0 votes






