我有一个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;
}
答案 0 :(得分:0)
我不会编写代码来执行此操作。我将同步Java对象或使用数据库工具进行隔离以执行您想要的操作。
答案 1 :(得分:0)
据我所知,你只需要一个循环(最外层的循环)多线程程序的工作方式类似于单线程程序,因为在整个地方都有无限循环不是一个好主意。
我会有一个检查线程,它将任务添加到第一个循环中的线程池中,然后删除其余部分。
答案 2 :(得分:0)
多线程很难。
sleep()调用和无限循环更适合填充,因为如果你尝试使用多线程,你会发现令人讨厌的惊喜。
那说你的代码应该相对容易转换为多线程代码。