Я наткнулся на ситуацию, когда моя программа висит, выглядит как тупик. Но я пытался выяснить это с помощью Jconsole и Visualvm, но они не обнаружили никакого тупика. Пример кода:
public class StaticInitializer {
private static int state = 10;
static {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
state = 11;
System.out.println("Exit Thread");
}
});
t1.start();
try {
t1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("exiting static block");
}
public static void main(String...strings) {
System.out.println(state);
}
}
Когда я выполняю это в режиме отладки, тогда я мог видеть, как контроль достигает @ Переопределить public void run () { state = 11;
, но как только state = 11 выполняется, он просто зависает/блокирует. Я просмотрел разные сообщения в stackoverflow и подумал, что статические инициализаторы безопасны для потоков, но в этом случае jconsole должен сообщить об этом. О главном потоке, jconsole говорит, что он в состоянии ожидания, и это нормально. Но для потока, созданного в блоке статического инициализатора, jconsole говорит, что он находится в состоянии RUNNABLE и не заблокирован. Я в замешательстве и здесь не хватает какой-то концепции. Пожалуйста, помогите мне.
-121--885473-У меня есть 2 таблицы данных, и я просто хочу знать, являются ли они одинаковыми или нет. Под «одинаковыми» я имею в виду, что они имеют точно такое же количество строк с точно такими же данными в каждом столбце, или нет. Я бы хотел написать (найти) метод, который принимает обе таблицы и возвращает логическое значение.
Как таким образом сравнить 2 таблицы данных? Обе схемы имеют одинаковые схемы.