2010-12-29 11 views
0

私は、データベースにアクセスしてその値をリストに入れ、複数のスレッドを使用してそれらの値を印刷する必要があります。現在、私は2つのスレッドを使用し、各スレッドは、データベースを作成し、リスト全体を反復するので、すべての値を2回得ることができます。これを解決するのに役立ちます。Javaマルチスレッド

+2

これにいくつかのコードを記載してください。 –

+0

あなたの問題が何であるかわかりません。なぜ値を2度印刷しないのですか? – Falmarri

答えて

1

年齢の古い分裂と征服の技術。論理的にデータベースを2つの半分に分割します(DBから100の値を読み込み、各スレッドに50の値を読み込ませます)。データを1つのリストにマージして、その1つのリストを印刷します。

+1

+1は実際に質問に返答します。 – Favonius

0

//これは私のコード

class Conn 
{ Connection getDBConnection(String serverName,String url,String userid,String password) { 
    Connection conObj = null; 
    try {Class.forName("oracle.jdbc.OracleDriver"); 
     conObj = DriverManager.getConnectionurl,userId,password); 
     return conObj;} 
      catch(Exception e){ 
      }}} 
     class listObj extends Conn 
{ List lst; 
Connection con; 
String query; 
public List resultList() { 
    try{//connection code 
    query = "select * from test"; 
     ResultSet rs = st.executeQuery(query); 
    lst=new ArrayList(); 
     while(rs.next()) 
      {lst.add(rs.getInt(1);}return lst; 
    } catch(Exception e) 
{ } 
    }} 
class Thread1 extends listObj implements Runnable 
{ public void run() 
    {List ls=null; 
     try {ls=(ArrayList)resultList(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
      ListIterator it= ls.listIterator(); 
     while (it.hasNext()){ 
      System.out.println(it.next()); 
     } }}  
    class TestMain extends listObj { 
    p.s.v.m(String a[]) throws Exception { 
     Thread t1=new Thread(new Thread1()); 
     Thread t2=new Thread(new Thread1()); 
     t1.start();t2.start();}} 
0

が一つの選択肢である最初のn行をフェッチとの組み合わせで更新のために選択しね。

したがって、最初のスレッドがn個の行を読み込んだ場合、同じスレッドは連続するスレッドによって無視されます。