1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.resolver.dns;
17
18 import io.netty.util.concurrent.FastThreadLocal;
19
20 import java.net.InetSocketAddress;
21
22
23
24
25 final class ThreadLocalNameServerAddressStream implements DnsServerAddressStream {
26
27 private final String hostname;
28 private final DnsServerAddressStreamProvider dnsServerAddressStreamProvider;
29 private final FastThreadLocal<DnsServerAddressStream> threadLocal = new FastThreadLocal<DnsServerAddressStream>() {
30 @Override
31 protected DnsServerAddressStream initialValue() {
32 return dnsServerAddressStreamProvider.nameServerAddressStream(hostname);
33 }
34 };
35
36 ThreadLocalNameServerAddressStream(DnsServerAddressStreamProvider dnsServerAddressStreamProvider) {
37 this(dnsServerAddressStreamProvider, "");
38 }
39
40 ThreadLocalNameServerAddressStream(DnsServerAddressStreamProvider dnsServerAddressStreamProvider, String hostname) {
41 this.dnsServerAddressStreamProvider = dnsServerAddressStreamProvider;
42 this.hostname = hostname;
43 }
44
45 @Override
46 public InetSocketAddress next() {
47 return threadLocal.get().next();
48 }
49
50 @Override
51 public DnsServerAddressStream duplicate() {
52 return new ThreadLocalNameServerAddressStream(dnsServerAddressStreamProvider, hostname);
53 }
54
55 @Override
56 public int size() {
57 return threadLocal.get().size();
58 }
59 }