我有一個多線程java應用程序,它從Postgresql數據庫檢索用戶名以進行處理。Java同步塊不能正常工作
我只希望每個線程一次處理一個帳戶,因此我的表中有一列有上次訪問的時間戳,只有超過30秒的訪問權限的帳戶纔會被提取。 SQL查詢的作品如下,我只是發佈它是明確的。
我有一個synchronized塊,從而將更新時間戳花費的時間是數據庫的出價只有一個線程可以訪問該帳戶檢索過程。
public class TC extends Common implements Runnable
{
RegularExpr reg = new RegularExpr();
Database db = new Database();
public void run()
{
while (true)
{
try
{
ArrayList<Object> accountInfo = null;
synchronized (this)
{
accountInfo = db.getAccount();
db.updateAccountAccessTime((String) accountInfo.get(0));
Thread.sleep(3000);
}
System.out.println((String) accountInfo.get(0));
Thread.sleep(9999999);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
我的主類
public class Main
{
public static void main(String[] args)
{
for (int i = 0; i < 3; i++)
{
System.out.println("Inside loop to create threads!");
Thread newThread = new Thread(new TC());
newThread.start();
}
}
}
但我仍然收到相同的帳戶,當我運行程序。我做錯了什麼?
我該如何實現我所需要的? – Arya
您將不得不在TC類上使用靜態最終對象,並使用它來同步而不是使用它。 – Codebender