У меня есть Java-приложение, в котором в потоке находится соединение через сокет, которое собирает данные и передает их другому потоку для обработки данных, используя концепцию производителя и потребителя, помещая их в очередь. Проблема в том, что поток обработки базы данных иногда не запускается, и я замечаю, что некоторые из набора результатов и оператор не были закрыты. Может ли это быть причиной его провала или есть какая-то другая причина? Насколько я знаю, что это сбой, это использование метода isAlive для проверки потока обработки базы данных, который показывает, что никакое значение не означает, что он мертв.
Фрагмент моих кодов.
private LinkedBlockingQueue<String> databaseQueue = new LinkedBlockingQueue<String>();
class DatabaseProcessor implements Runnable {
public void run()
{
try
{
createConnection();
while (true)
{
message = databaseQueue.take();
//all the database processing here with multiple queries and resultsets
}
}
catch (Exception e)
{
e.printStackTrace(System.out);
try
{
dbconn.rollback();
}
catch (Exception rollback)
{
rollback.printStackTrace(System.out);
}
}
}
}