Java многопоточное приложение для обновления БД - PullRequest
1 голос
/ 23 апреля 2011

У меня есть БД, которая имеет 100 записей, необходимо обновить определенную запись столбца таблицы который динамически требует обновления.

По сути, все 100 записей, которые они собирают данные с диска и обновите таблицы БД. Чтобы получить информацию о БД / диске, они должен получить блокировку, которая пытается, пока не получит блокировку в цикле while. Как только они получат блокировку, обновлять только последнюю версию diskinfo до БД можно только в *. 1003 *

У меня есть следующий псевдо-код, который по существу выполняет вышеуказанную работу последовательно. Я хочу запустить их многопоточно, чтобы можно было выполнять параллельную работу. Не могли бы вы помочь мне. Я совершенно новичок в многопоточной Java-программе.

Спасибо заранее за вашу помощь.

while(true)
{

for(int i=0,i<100;i++)
{
    //Get the info from Disk
    String diskInfo=getDiskInfo(i);
    //Get the info from DB table
    String dbInfo=getDBInfo(i);
    if (! diskInfo.equals(dbInfo))
    {
        //Update DB with diskInfo
        boolean status=UpdateDB(i);
    }
}

sleep(2000);

}
//Get the info from Disk

public String getDiskInfo()
{
  //Get the  disk
   //lock the disk wait if busy
    while(true)
    {
    //get disk lock
    sleep(2000);
    }
    //fetch data
    String data = "test";
    //unlock disk
    return data;    

}

public String getDBInfo()
{
  //Get the  DB
   //lock the DB wait if busy
    while(true)
    {
    //get DB lock
    sleep(2000);
    }
    //fetch data
    //select data from X;
    String data = "test";
    //unlock disk
    return data;    

}

public boolean UpdateDB()
{
   //Get the  DB
   //lock the DB wait if busy
    while(true)
    {
    //get DB lock
    sleep(2000);
    }
    //fetch data
     if(!getDiskInfo(),equals(getDBInfo())
     {
     //lock the DB wait if busy
    while(true)
    {
    //get DB lock
    sleep(2000);
    }
    status=UpdateDB();

     } 
     else
     {
       //no update  needed
    status=false;
     }
    return status;  

}

Ответы [ 3 ]

0 голосов
/ 23 апреля 2011

Насколько я вижу, вам нужен только один цикл (самый внешний цикл) Многопоточные программы работают аналогично однопоточным программам в том смысле, что нецелесообразно иметь бесконечные циклы повсюду.

У меня был бы один проверочный поток, который добавляет задачи в пул потоков в вашем первом цикле и удаляет остальные.

0 голосов
/ 23 апреля 2011
  1. Изучите концепции многопоточности.
  2. Затем изучите многопоточность Java.
  3. Затем изучите многопоточность Java api java.util.concurrent.
  4. Тогда используйте Java API.Обязательно используйте наиболее подходящие классы.

Многопоточность сложна.

Этот цикл sleep () и цикл inifinite лучше использовать для заполнения, потому что вы обнаружите неприятные сюрпризы, если выпопробуйте это с многопоточностью.

При этом ваш код должен быть относительно легко преобразован в многопоточность.

0 голосов
/ 23 апреля 2011

Я бы не писал код для этого.Я бы синхронизировал объекты Java или использовал бы средства базы данных для изоляции, чтобы делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...