Форум
Java
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, wessen, Вы писали: W>Решение такой проблемы есть в книжке Java Concurrency In Practice, называется Memorizer. С виду оне конечно замороченное, на работать будет и на java 1.5 W>[code=java] W>public class Memorizer<A, V> implements Computable<A, V> { W> private final ConcurrentMap<A, Future<V>> cache W> = new ConcurrentHashMap<A, Future<V>>(); W> private final Computable<A, V> c; W> public Memorizer(Computable<A, V> c) { this.c = c; } W> public V compute(final A arg) throws InterruptedException { W> while (true) { W> Future<V> f = cache.get(arg); W> if (f == null) { W> Callable<V> eval = new Callable<V>() { W> public V call() throws InterruptedException { W> return c.compute(arg); W> } W> }; W> FutureTask<V> ft = new FutureTask<V>(eval); W> f = cache.putIfAbsent(arg, ft); W> if (f == null) { f = ft; ft.run(); } W> } W> try { W> return f.get(); W> } catch (CancellationException e) { W> cache.remove(arg, f); W> } catch (ExecutionException e) { W> throw launderThrowable(e.getCause()); W> } W> } W> } W>} W>[/code]
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …