java多线程应用程序更新数据库

java多线程应用程序更新数据库,java,database,multithreading,Java,Database,Multithreading,我有一个数据库,其中有100个条目需要更新某些表列条目 它是动态的,需要更新 基本上所有的100个条目都是从磁盘收集数据的 并更新数据库表。为了获取数据库/磁盘信息,他们 必须获得锁,直到在while循环中获得锁为止。 一旦获得锁,他们只能将最新的diskinfo更新到DB 我有一个下面的pesudo代码,它基本上按顺序完成上述工作。 我想以多线程的方式运行它们,以便可以完成并行工作。 你能给我介绍一下吗?我对java多线程程序完全不熟悉 提前感谢你的帮助 while(true) { for(

我有一个数据库,其中有100个条目需要更新某些表列条目 它是动态的,需要更新

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

我有一个下面的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;  

}
while(true)
{

对于(int i=0,i我不会为此编写代码。我会同步Java对象或使用数据库工具进行隔离,以完成您想要的操作。

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

我会有一个检查线程,在第一个循环中将任务添加到线程池中,并删除其余的任务

  • 学习多线程概念
  • 然后学习java多线程概念
  • 然后学习java多线程 api java.util.concurrent
  • 然后使用JavaAPI。确保使用最合适的类
  • 多线程是很难的

    sleep()调用和INIFIENT循环最好是用来填充的,因为如果您尝试使用多线程,您会发现令人不快的惊喜

    也就是说,您的代码应该相对容易转换为多线程代码