Javaでマルチスレッドを使用してアプリケーションを作成していますが、これを一時停止して再開します。
スレッドはパターンに一致する行を見つけながら、ファイルを1行ずつ読み込みます。私はスレッドを一時停止した場所で続行する必要があります。ファイルを読むために、私はInputStreamReaderとFileInputStreamとの組み合わせでBufferedReaderを使用します。Java:スレッドを一時停止し、ファイル内の位置を取得
fip = new FileInputStream(new File(*file*));
fileBuffer = new BufferedReader(new InputStreamReader(fip));
ファイル内の位置にファイルポインタが必要なので、このFileInputStreamを使用します。
行を処理するときに、一致する行をMySQLデータベースに書き込みます。スレッド間でMySQL接続を使用するには、ConnectionPoolを使用して、1つのスレッドが1つの接続を使用していることを確認します。
問題は、スレッドを一時停止してから再開するときに、いくつかの一致する行が消えてしまうことです。私はオフセットからバッファサイズを減算しようとしましたが、それでも同じ問題があります。
この問題を解決するうえで、何が間違っているのですか?
いくつかの詳細:
データベースここ
// Get the connector
ConnectionPoolManager cpl = ConnectionPoolManager.getManager();
Connector con = null;
while(con == null)
con = cpl.getConnectionFromPool();
// Insert the query
con.executeUpdate(this.sql.toString());
cpl.returnConnectionToPool(con);
私は以前の記事で言ったように。私はbufferSizeを減算してから、バッファに読み込まれた文字を追加します。この方法では、バッファ内の未読文字の数だけを減算します。これを標準のBufferedReaderで取得する方法はありませんが、標準のBufferedReaderを拡張して、すでに読み込まれている文字の量を取得しました。 – Yoni
@Yoni - おそらく問題は文字数とバイト数です。私はあなたがファイルチャネルにドリルダウンして、その位置が何であるかを調べるべきではないと思います。スタックの上位レベルの文字を数えてください。 –