java多线程应用程序来更新DB

时间:2011-04-23 16:09:27

标签: java database multithreading

我有一个DB,其中有100个条目需要更新某些表colum条目 这是动态需要更新的。

基本上他们从磁盘收集数据的所有100个条目 并更新数据库表。为了获取数据库/磁盘信息,他们 必须获得尝试的锁,直到在while循环中获得锁定。 一旦获得锁定,则只能将最新的diskinfo更新到数据库。

我有一个以下的pesudo代码,基本上按顺序执行上述工作。 我想以多线程方式运行它们,以便可以完成并行工作。 你能指导我吗。我是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 :(得分:0)

我不会编写代码来执行此操作。我将同步Java对象或使用数据库工具进行隔离以执行您想要的操作。

答案 1 :(得分:0)

据我所知,你只需要一个循环(最外层的循环)多线程程序的工作方式类似于单线程程序,因为在整个地方都有无限循环不是一个好主意。

我会有一个检查线程,它将任务添加到第一个循环中的线程池中,然后删除其余部分。

答案 2 :(得分:0)

  1. 学习多线程概念。
  2. 然后学习java多线程概念。
  3. 然后学习java多线程 api java.util.concurrent。
  4. 然后使用java api。一定要使用最合适的课程。
  5. 多线程很难。

    sleep()调用和无限循环更适合填充,因为如果你尝试使用多线程,你会发现令人讨厌的惊喜。

    那说你的代码应该相对容易转换为多线程代码。

相关问题