Если поставить точку останова на 1-ю строку, а , 2-4 закоментить, и при запуске дебага перейти сразу к 5-й строке, то метод run, дочернего потока, не печатает свою работу, а если расскоментить 2-ю строку, перейти к ней, ее выполнить, то метод run сработает.
class Solutionn {
public static void main(String[] args) throws IOException {
Solution sol = new Solution(11); // строка 1
//System.out.println(sol); // строка 2
byte[] withStaticAsBytes = getObjWithStaticFieldAsByteArray(sol); // строка 3
System.out.println(getObjFromByteArray(withStaticAsBytes)); // строка 4
System.out.println(5); // строка 5
}
private static byte[] getObjWithStaticFieldAsByteArray(Solution someObj) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(someObj);
return baos.toByteArray();
}
private static Solution getObjFromByteArray(byte[] objAsByteArray) throws IOException {
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(objAsByteArray));
Solution retObj = null;
try {
retObj = (Solution) ois.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return retObj;
}
}
//###
class Solution implements Runnable, Serializable {
private transient Thread runner;
private int speed;
public Solution(int speed) {
this.speed = speed;
runner = new Thread(this);
runner.start();
}
@Override
public void run() {
System.out.println("I`m running from the run() with speed = " + speed);
}
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
runner = new Thread(this);
runner.start();
}
@Override
public String toString() {
return "Solution{" +
"runner=" + runner +
", speed=" + speed +
'}';
}
}