Hầu hết các câu trả lời bỏ lỡ bức tranh lớn, đó là, theo như ngôn ngữ Java là có liên quan, không có sự khác biệt nhiều giữa t.start()
và r.run()
hơn là giữa hai phương pháp khác.
Cả hai chỉ là phương pháp. Cả hai đều chạy trong chuỗi được gọi là. Cả hai đều làm bất cứ điều gì họ đã được mã hóa để làm, và sau đó cả hai đều trở lại, vẫn còn trong cùng một chủ đề, cho người gọi của họ.
Sự khác biệt lớn nhất là hầu hết mã cho t.start()
là mã gốc trong khi, trong hầu hết các trường hợp, mã cho r.run()
sẽ là Java thuần túy. Nhưng đó không phải là một sự khác biệt. Mã là mã. Mã gốc khó tìm hơn và khó hiểu hơn khi bạn tìm thấy nó, nhưng nó vẫn chỉ là mã cho máy tính biết phải làm gì.
Vì vậy, t.start()
làm gì?
Nó tạo ra một chuỗi gốc mới, nó sắp xếp cho chuỗi đó để gọi t.run()
, và sau đó nó cho hệ điều hành để cho thread mới chạy. Sau đó, nó trả về.
Và r.run()
làm gì?
Điều thú vị là, người hỏi câu hỏi này là người đã viết nó. r.run()
thực hiện bất kỳ điều gì bạn (tức là, nhà phát triển đã viết nó) đã thiết kế để thực hiện.
t.start()
là phương thức mà thư viện cung cấp để mã của bạn gọi khi bạn muốn một chuỗi mới.
r.run()
là phương pháp mà bạn cung cấp cho thư viện gọi trong thread mới.
Nguồn
2015-10-27 18:17:10
Couuld Tôi cho rằng trước khi chúng ta gọi là chủ đề # start(), không có gì thực sự so với os chủ đề sẽ xảy ra? Nó chỉ là một đối tượng java. – Jaskey
Đúng theo tài liệu. Kiểm tra mã khởi tạo đối tượng thread, phù hợp với tài liệu. Cũng trong mã nguồn, nó là 'start()', gọi là phương thức natvie, cái mà phải làm cho những thứ liên quan đến chuỗi os xảy ra. –
Tài liệu xây dựng của chủ đề là [ở đây] (https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#Thread (java.lang.ThreadGroup,% 20java.lang.Runnable, % 20java.lang.String)). Nguồn khởi tạo đối tượng chủ đề là [tại đây] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Thread.java#Thread.init% 28java.lang.ThreadGroup% 2Cjava.lang.Runnable% 2Cjava.lang.String% 2Clong% 29). nguồn phương thức 'start()' là [ở đây] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Thread.java#Thread .start% 28% 29). –