[
https://issues.apache.org/jira/browse/HBASE-15702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15257370#comment-15257370
]
Hiroshi Ikeda commented on HBASE-15702:
---------------------------------------
We can generally expect that VM implementations load classes lazily. Just
create static final fields.
ThreadLocalRandom.current returns a different instance for each thread and
satisfy the need to avoid conflict between threads, and moreover, under that
condition, ThreadLocalRandom drops overheads of synchronization. Holding the
return instance in a field not only thoroughly fails in the purpose but also
introduces a thread-safety issue.
> Improve PerClientRandomNonceGenerator
> -------------------------------------
>
> Key: HBASE-15702
> URL: https://issues.apache.org/jira/browse/HBASE-15702
> Project: HBase
> Issue Type: Improvement
> Reporter: Hiroshi Ikeda
> Priority: Trivial
> Fix For: 2.0.0
>
> Attachments: HBASE-15702.patch
>
>
> PerClientRandomNonceGenerator can be exposed to all the threads via the
> static field ConnectionManager.nonceGenerator, but
> PerClientRandomNonceGenerator uses Random, which should be ThreadLocalRandom
> or something. (See javadoc of Random.)
> Moreover, ConnectionManager creates or refers the singleton instance of
> PerClientThreadLocalRandom with a lock or volatile, but it should be created
> as a static final field in PerClientThreadLocalRandom itself, and the
> creation will be postponed until the field is actually refereed and the class
> is being initialized.
> The same can be said for ConnectionManager.NoNonceGenerator.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)