从Web服务收到的响应我正在后台线程中将其写入数据库。 同时我正在执行其他数据库操作,因为该应用程序面临死锁,如here所述。 如链接中所述,有两种可能的方法
不要让编写器线程加入读者线程。如上所述here我试图以这样的方式使用java线程,即在执行数据库操作时不应发生死锁。我已经使用了synchronized块来实现这一点,但它没有帮助。
我没有使用第二种方法,因为它可能会丢失数据。
我该如何解决这个问题?
答案 0 :(得分:0)
问题是因为我通过我的应用程序使用相同的数据库对象。 虽然我使用synchronized方法来访问数据库并执行数据库操作,但数据库对象是相同的。
假设我有三个同步的方法getdatabase()
,writedb()
,readdb()
,它们返回数据库对象,写入数据库并分别从数据库中读取。
我有两个线程T1和T2。
getdabase()
getdabase()
(由于T1未使用此方法,因此将访问访问权限)readdb()
。
--Deadlock 为避免此问题,我使用了Application变量(Application类中的静态变量),只有在没有其他线程使用数据库时才会授予对数据库的访问权。