Многопоточность Java - PullRequest
       0

Многопоточность Java

0 голосов
/ 29 декабря 2010

У меня есть требование, при котором я должен получить доступ к базе данных и поместить эти значения в список, а затем распечатать эти значения, используя несколько потоков. В настоящее время я использую 2 потока, и мой вывод такой, что каждый поток устанавливает отдельное соединение с базой данных иперебирает весь список и, следовательно, выводит каждое значение дважды. Помощь в решении этой проблемы

Ответы [ 4 ]

1 голос
/ 29 декабря 2010

Вековая техника разделяй и властвуй.Логически разделите вашу базу данных на 2 половины (допустим, вы прочитали 100 значений из БД, а затем каждый поток прочитал 50 значений).Объедините данные обратно в один список, а затем распечатайте этот список.

1 голос
/ 29 декабря 2010

Почему бы не использовать вместо этого пул соединений? http://sourceforge.net/projects/c3p0/

0 голосов
/ 29 декабря 2010

выбрать для обновления в сочетании с извлечь первые n строк является одним из вариантов.

, поэтому, если первый поток прочитает n строк, то же будет игнорироватьсяпоследовательные темы.

0 голосов
/ 29 декабря 2010

// это мой код

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();}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...