ببین یه وقفه زمانی باعث شده که شما فکر کنی که Thread داره بازی در میاره که در اصل این ذات Thread است. ولی یعنی چی
اگر اون خط کامنت شده رو از Comment در بیاری Main Thread درگیر یک I/O کوچلو برای چاپ کردن مقدار i میشه. از اون طرف Thread مربوط به port هم رفته مقدار دهی شده یعنی
this.stopMe = Thread.currentThread();
رو انجام داده و یک دور اون حلقه while داخل run اجرا میشه
از این طرف Main Thread رسیده به
port.stopMe();
پس مقدار stopme رو برابر با null میذاره
از اون طرف Thread مربوط به port که میخواد دوباره حلقه رو اجرا کنه به گیر میخوره یعنی شرط while دیگه true نیست پس از حلقه بیرون میاد و اون پیغام was killed ..... رو اجرا میکنه و برنامه تمومه.
ولی اما اگر اون خط comment بمونه Main Thread سریع حلقه رو اجرا میکنه و سریع به
port.stopMe();
میرسه درحالی که روند اجرا اون Thread هنوز متد run اون Thread رو اجرا نکرده و هنوز مقدار stopMe = null است باز این متد میاد دوباره مقدار stopMe رو برابر با null میزاره یعنی اجرا شده این ()port.stopme بیهوده اس
پس وقتی که متد run اجرا میشه دیگه جای نیست که اونو متوقف کنه پس اون حلقه داخلش یک شرط همیشه درسته و تا بینهایت اون پیام رو چاپ میکنه
نکته : I/O تویه روند اجرا یک کاره سنگینه که باعث بلاک شدن روند اجرا میشه که نتیجش بروز این رفتارهاس.
موفق باشی