シンクロ周りをputとバックグランド書き出しまわりで調整
@@ -79,7 +79,7 @@ | ||
79 | 79 | for (int i = 0; i < data.length; i++) { |
80 | 80 | cacheData[i] = data[i]; |
81 | 81 | } |
82 | - this.diskCacheManager.addCacheDarta(seekPoint, cacheData); | |
82 | + this.diskCacheManager.addCacheData(seekPoint, cacheData); | |
83 | 83 | } else { |
84 | 84 | //cacheHitCount++; |
85 | 85 | //if ((cacheHitCount % 5000) == 0) System.out.println("Cache hit count=" + cacheHitCount + " [" + new Date().toString()); |
@@ -110,6 +110,7 @@ | ||
110 | 110 | private ConcurrentHashMap fixWriteDataMap = new ConcurrentHashMap(20000); |
111 | 111 | private DiskBaseCacheMap diskBaseCacheMap = null; |
112 | 112 | private Object sync = new Object(); |
113 | + private Object removeSync = new Object(); | |
113 | 114 | |
114 | 115 | private boolean noCache = false; |
115 | 116 |
@@ -149,6 +150,10 @@ | ||
149 | 150 | Long cacheSeekPoint = (Long)this.writeQueue.poll(); |
150 | 151 | if (cacheSeekPoint != null) { |
151 | 152 | byte[] cacheData = (byte[])fixWriteDataMap.remove(cacheSeekPoint); |
153 | + if (cacheData == null) { | |
154 | + Thread.sleep(10); | |
155 | + cacheData = (byte[])fixWriteDataMap.remove(cacheSeekPoint); | |
156 | + } | |
152 | 157 | if (cacheData != null) { |
153 | 158 | this.diskBaseCacheMap.put(cacheSeekPoint, cacheData); |
154 | 159 | } |
@@ -165,9 +170,9 @@ | ||
165 | 170 | } |
166 | 171 | |
167 | 172 | |
168 | - public void addCacheDarta(long seekPoint, byte[] cacheData) { | |
173 | + public void addCacheData(long seekPoint, byte[] cacheData) { | |
169 | 174 | if (this.noCache) return; |
170 | - synchronized (this.sync) { | |
175 | + synchronized (this.removeSync) { | |
171 | 176 | Long seekPointLong = new Long(seekPoint); |
172 | 177 | if(this.writeQueue.offer(seekPointLong)) { |
173 | 178 | this.fixWriteDataMap.put(seekPointLong, cacheData); |
@@ -183,9 +188,12 @@ | ||
183 | 188 | |
184 | 189 | public void removeCache(long seekPoint) { |
185 | 190 | if (this.noCache) return; |
186 | - synchronized (this.sync) { | |
187 | - this.diskBaseCacheMap.remove(new Long(seekPoint)); | |
188 | - this.fixWriteDataMap.remove(seekPoint); | |
191 | + synchronized (this.removeSync) { | |
192 | + synchronized (this.sync) { | |
193 | + | |
194 | + this.diskBaseCacheMap.remove(new Long(seekPoint)); | |
195 | + this.fixWriteDataMap.remove(seekPoint); | |
196 | + } | |
189 | 197 | } |
190 | 198 | } |
191 | 199 |