Vì vậy, tôi đang cố gắng làm việc với các chủ đề cho một trò chơi mà tôi đang thực hiện. Tôi là rất mới đối tượng nên tôi có thể không hiểu chính xác. Câu hỏi của tôi là phương thức currentThread() hoạt động như thế nào trong lớp Thread của java API. API nói "Trả về một tham chiếu đến đối tượng chuỗi đang thực thi hiện tại.", Nhưng theo như tôi hiểu nhiều luồng chạy cùng một lúc. Làm thế nào là nó có thể trả về chỉ một chuỗi thực hiện?Phương pháp hiện tại chủ đề java
Trả lời
Mã gọi currentThread
sẽ được thực hiện trong một trong các chủ đề, không phải trong tất cả các chuỗi, để có thể nhận được chuỗi đó cụ thể.
Cảm ơn bạn đã làm cho nó rõ ràng hơn nhiều. – user1427380
Khi lệnh trong mã của bạn được thực thi, nó được thực hiện trong một chuỗi cụ thể. Đây là luồng được trả về bởi phương thức đó.
Rõ ràng, nếu một phương pháp cụ thể được thực hiện bởi nhiều luồng, mỗi lần thực hiện có thể trả về một giá trị khác nhau cho Thread.currentThread()
.
Bạn có thể thử ví dụ ngắn này để có ý tưởng tốt hơn về những gì đang diễn ra và cụ thể là 2 luồng thực thi song song. Bạn sẽ thấy rằng t1 sẽ chạy một vài vòng sau đó t2 sẽ làm như vậy và trở lại T1 vv (bạn có thể cần phải tăng số vòng từ 5 đến một số cao hơn tùy thuộc vào máy tính của bạn):
public class TestThread {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread());
}
}
};
Thread t1 = new Thread(r, "t1");
Thread t2 = new Thread(r, "t2");
t1.start();
t2.start();
}
}
Tại sao bạn cần in ra chuỗi hiện tại trong một vòng lặp? Một khi đủ, tôi sẽ nghĩ. – Jeffrey
Tôi thích 2 câu đầu tiên của bạn ... nhưng phần còn lại của bài đăng, đặc biệt là mã, có vẻ mơ hồ, đủ để gây nhầm lẫn. – goat
@ Jeffrey ý tưởng là để hiển thị một số interleaving nơi một sợi có thể chạy vòng lặp hai lần sau đó một khác đi hoạt động vv – assylias
"Chuỗi hiện đang thực hiện" có nghĩa là trình lên lịch hệ thống đã dành một chút thời gian cho luồng này để thực thi mã của nó.
Nhiều luồng không chạy cùng lúc và có quá trình chuyển đổi chuỗi giữa nhiều luồng. Bộ vi xử lý có thể thực hiện một tác vụ tại một thời điểm để một luồng được thực thi một lúc. Vì vậy, chúng tôi nhận được tham chiếu của thread hiện đang chạy.
Máy đa lõi thực sự chạy nhiều luồng cùng một lúc. Tôi có một chương trình đa luồng, đa luồng (với các chủ đề tương tác cao) hoạt động trên một máy tính lõi đơn, sau đó chuyển nó sang một máy có 4 lõi. Đó là một nền giáo dục thực sự. – RalphChapin
"Nhiều luồng không được chạy cùng một lúc ..." – jdv
Giả sử bạn có danh sách các hướng dẫn được in trên một mảnh giấy. Một người đọc hướng dẫn và thực hiện chúng. Các hướng dẫn là một chương trình. Người đó là một sợi chỉ. Bạn có thể tạo nhiều bản sao của tờ giấy và truyền cho nhiều người. Nếu hướng dẫn nói một cái gì đó như, "tát bản thân," mình là bất kỳ ai đang đọc hướng dẫn đó từ bài báo đó. Tương tự, Thread.currentThread()
đề cập đến chuỗi đang thực hiện cuộc gọi đó đến currentThread()
.
Khi viết một ứng dụng đơn luồng, bạn có thể suy luận trên chương trình của bạn giống như một loạt các hướng dẫn, mỗi thực hiện sau khi trước đó đã kết thúc (đây là một xấp xỉ thô, nhưng khái niệm compilator và bộ xử lý cố gắng mô phỏng đó và làm việc như nếu điều này thực sự là những gì đã xảy ra).
Khi bạn sử dụng nhiều chuỗi, mỗi chuỗi có một chuỗi hướng dẫn riêng. Một chủ đề mới khi được tạo được thông qua một điểm vào (một phương thức), và sẽ tiếp tục thực thi từ chúng. Mỗi luồng độc lập với luồng khác trong thực thi của chúng (nó sẽ chỉ thực hiện một lệnh sau lệnh kia), mặc dù chúng chia sẻ bộ nhớ và do đó tác dụng phụ từ một luồng có thể ảnh hưởng đến một luồng khác. Vì vậy, đối với một số mã được thực hiện, nó phải được thực hiện trong bối cảnh của một luồng (có một hệ điều hành được tạo ra khi ứng dụng của bạn bắt đầu, bắt đầu thực hiện tại phương thức Main
). Khi hàm currentThread
được gọi, nó là một trong những ngữ cảnh đó.
Thời gian chạy java khi tạo chuỗi sẽ lưu tham chiếu đến đối tượng Thread
trong ngữ cảnh chuỗi và currentThread
sẽ chỉ tra cứu ở đó và trả về chuỗi hiện tại.
Tại bất kỳ thời điểm cụ thể nào, chỉ một chuỗi sẽ được thực hiện (trực tiếp), vì vậy, Thread.currentThread()
trả về chi tiết của Chuỗi đang thực hiện. ví dụ: Thread_name, priority, method_name.
- 1. Phương pháp Java Chạy trong chủ đề
- 2. Tắt phản chiếu Java cho chủ đề hiện tại
- 3. Số chủ đề hiện tại của Jmeter?
- 4. ngã ba và chủ đề hiện tại?
- 5. Java - Phương pháp Gọi & Thực hiện
- 6. Lấy tên của phương pháp hiện tại
- 7. lấy lớp và phương pháp hiện tại?
- 8. Phương pháp lớp và an toàn chủ đề (NSJSONSerialization)
- 9. Giới hạn số lượng chủ đề thực hiện một phương thức tại một thời điểm
- 10. Daemon chủ đề Java
- 11. Chủ đề trong các chủ đề trong Java?
- 12. đồng bộ hóa các chủ đề java
- 13. Scala, không thể thực hiện phương pháp java chung
- 14. Java: `Phương pháp static`
- 15. Chủ đề trong Java
- 16. Kiểm tra xem chủ đề hiện tại có phải là chủ đề chính
- 17. Java - chuyển về chủ đề chính?
- 18. Java - Phương pháp tĩnh chung
- 19. System.exit trong Java Chủ đề
- 20. Java Dừng máy chủ Chủ đề
- 21. Phương pháp Java để lưu trạng thái hiện tại của một chương trình
- 22. Cách lấy tên chủ đề hiện tại trong Magento
- 23. Nhận loại hiện tại theo phương pháp tĩnh, chung?
- 24. Ví dụ về một phương pháp thể hiện? (Java)
- 25. java Chủ đề trong libGDX
- 26. Java - Phương pháp ảo
- 27. Tại sao phương pháp tĩnh của tôi ẩn phương pháp thể hiện của tôi?
- 28. Java Event-Dispatching Giải thích chủ đề
- 29. Có thể thay đổi thời gian hiện tại của một ví dụ chủ đề hoặc jvm trong java không?
- 30. Quan hệ giữa phương thức main() và chủ đề chính trong Java là gì?
bạn nên đọc một số hướng dẫn về luồng. – Sajmon
Tôi nghĩ rằng họ nên đặt tên nó là getSelfThread() hoặc một cái gì đó như thế, bởi vì có thể có nhiều hơn một hiện đang thực hiện thread với cp đa lõi. – goat