我在我的应用程序中使用数据库,我要求同步访问数据库,例如当我的应用程序启动两个线程正在访问数据库时,我该如何避免这种情况?
private synchronized Database accessDB()
{
Database dbObj = null;
try {
_uri = URI.create(dbLocation + DB_NAME);
try {
dbObj = DatabaseFactory.openOrCreate(_uri, new DatabaseSecurityOptions(false));
System.out.println("Database Created"+_dbTopNews);
} catch (ControlledAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DatabaseIOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DatabasePathException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURIException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return dbObj;
}
当调试将对象返回到第一个线程时,上面的方法,但是当访问第二个线程时返回null
A Y
答案 0 :(得分:3)
通常,有两种方法可以执行此操作,具体取决于您所处的隔离。
1:交易。这隔离了数据库中的操作。例如,保证一次只有一个线程(会话)可以对表或行进行更改。
2:同步。这是Java中用于在多线程环境中处理线程并发的方法。通过使用同步(和“锁定”),可以隔离代码的各个部分,以便一次只有一个线程可以执行它。
很难对您提供的信息更加具体。