В вашем коде основной поток выполняется до того, как получатель студента выполнит код.
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
student = Student.Builder.newInstance().setId(1).setName("Ram").setAddress("Noida").build();
System.out.println(student.toString());
}
});
t1.start(); // It starts, but the runnable itself has not run yet!
Итак, сначала вы получаете студента, который равен null
, и распечатываете его в main, затем инициализируется StudentReceiver
ваш ученик.
Посоветуйте, не делайте этого в реальных задачах, но делайте это для обучения!
Кроме того, вы можете подождать, пока пользователь не инициализируется. Это один подход.
try {
t1.join();
t2.join();
} catch (Exception e) {
throw new RuntimeException("Handle it properly.", e);
}