情況如下:我在大文本文件上執行CharSequence
(爲了能夠將它們傳遞給Pattern
)。如何同時等待一個整數達到某個值?
我有CharWindow
個列表,它是一個非常簡單的類:
public final class CharWindow
{
private final long fileOffset;
private final long mappingLength;
private final int charOffset;
private final int charLength;
// Constructor, methods, etc etc
}
在一個單獨的類,我生成的從文件末尾的開頭開始CharWindow
小號實例;在這個過程中,我增加了一個AtomicInteger
(讓我們把它稱爲totalChars
),這是文件中的字符總數。
現在,讓我們想象一下,來電者撥打電話.charAt(25030)
CharSequence
;但是此時,讀取器/解碼器類僅完成(成功)解碼10430個字符;並繼續:15640,21032,25602 - 每次更新totalChars
。其他呼叫者也可以用不同的參數呼叫.charAt()
。
讓我們說,讀/解碼器類有一個(線程安全的,同時友好的)方法具有.needChars()
有一個int作爲參數和.charAt()
在CharSequence
實現的代碼如下:
@Override
public char charAt(final int index)
{
readerDecoder.needChars(index);
// do whatever is needed to read the chars
}
有沒有一種方法實現.needChars()
,以便它阻止等待totalChars
達到適當的值?
非常有趣!我會在那... – fge
我忘了添加它,但我認爲等待時間必須是重要的,以證明這種同步的開銷。如果平均等待時間相當短,只需簡單地等待AtomicLong(可能會添加一些線程)即可。產率()秒)。 – Pyranja
那麼,它取決於最初的文件大小......如果它有幾百兆字節的長度,則可能需要一些時間來驗證所有文本/計算偏移等。另外,如果不需要等待,那麼我會盡快修改,當然,對於所有來電者來說最終都是如此。 – fge