私は結果セットをマルチスレッドしようとしています。多くのスレッドのうちの1つにnext()
を呼び出すと、必ず他のすべてのスレッドがロックアウトされていることを確認したい。多くのスレッドがnext()
メソッドを同時に呼び出すと、行がスキップされるため、これは重要です。ここに私は何をしたのですか結果セットオブジェクトを同期ロックしますか?
public class MainClass {
private static ResultSet rs;
public static void main (String [] args) {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
runWhile();
}});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
runWhile();
}});
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.exit(0);
}
private static void runWhile() {
String username = null;
while ((username = getUsername()) != null) {
// Use username to complete my logic
}
}
/**
* This method locks ResultSet rs until the String username is retrieved.
* This prevents skipping the rows
* @return
* @throws SQLException
*/
private synchronized static String getUsername() throws SQLException {
if(rs.next()) {
return rs.getString(1).trim();
}
else
return null;
}
}
の正しい使い方ですか? ResutSet
をロックして他のスレッドが干渉しないことを確認しますか?
これは良いアプローチですか?
私は、ExecutorServiceにタスクを追加するResultSetを読み取るスレッドを1つ持っています。 –
ありがとうございます。私のアプローチが間違っていると感じました。それは動作しますが、それは右感じていません –
それはこのように動作します。しかし、注文は保証されていません。 – gba