Because the threads use a single variable to count.
A x+=1 (1) B x+=1 (2) A starts print (2), and goes to sleep B prints 2 B keeps working, incrementing x, printing 3 to 11 B goes to sleep A finishes the print of "2" it started a while back
Clarification of followup questions:
x is owned by the object
ob of class
abs there is only one which is shared across threads.
i is owned by the function
public void increment() and there are two independent calls of it.
As to the behaviour of sleeping on printing… That’s pretty much the whole point of threads. print takes forever from a cpu point of view and there are exclusive assets (there is only one console) involved