2010-12-29 16 views
0

Ich habe eine Anforderung, wo ich auf die Datenbank zugreifen und diese Werte in einer Liste platzieren und dann diese Werte mit mehreren threads.currently Ich verwende 2 Threads und meine Ausgabe ist so, dass jeder Thread stellt separate Verbindung zu Datenbank und iteriert die gesamte Liste und daher in output bekomme ich jeden Wert zweimal.pl helfen bei der Lösung dieserJava Multithreading

+2

Werden Sie bitte einen Code mit diesem? –

+0

Wir haben keine Ahnung, was Ihr Problem ist. Warum sollten Sie die Werte nicht zweimal drucken? – Falmarri

Antwort

1

Alte alte teilen und erobern Technik. Unterteilen Sie Ihre Datenbank logisch in zwei Hälften (nehmen wir an, Sie müssen 100 Werte aus der DB lesen, dann lassen Sie jeden Thread 50 Werte lesen). Verknüpfen Sie die Daten zurück zu einer einzelnen Liste und drucken Sie dann diese einzelne Liste aus.

+1

+1 für die tatsächliche Beantwortung der Frage. – Favonius

0

// dies ist mein Code

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

wählen Sie für die Aktualisierung in Kombination mit ersten Reihen n holen ist eine Option.

Wenn der erste Thread also n Zeilen liest, werden dieselben von den aufeinander folgenden Threads ignoriert.