Ok, tôi biết đó là sự hiểu biết xấu probabblly mz về cách đề thực sự làm việc, nhưng cho đến khi một người nào đó giúp tôi hiểu rằng tôi sẽ tin rằng đó là một lỗi :)Chủ đề getName() trả về sai tên
Trong lớp Main của tôi và phương pháp main() của nó tôi có:
public static void main(String args[]){
StoneBucket stoneBucket = new StoneBucket();
StonePutter spRunnable = new StonePutter(stoneBucket);
StoneThrower stRunnable = new StoneThrower(stoneBucket);
StoneThrower stRunnable2 = new StoneThrower(stoneBucket);
//Create the Threads that will take the Runnables as arguments
Thread puttingThread = new Thread(spRunnable);
Thread throwingThread = new Thread(stRunnable);
Thread throwingThread2 = new Thread(stRunnable);
puttingThread.setName("Putter");
throwingThread.setName("Thrower 1");
throwingThread2.setName("Thrower 2");
[...]
và sau đó trong lớp StoneThrower của tôi, tôi có
public class StoneThrower implements Runnable{
private StoneBucket sb;
private String name;
public StoneThrower(StoneBucket _sb){
this.sb = _sb;
}
public void run(){
name = Thread.currentThread().getName();
System.out.println("T::"+name+" started...");
int count = 0;
while(true){
[...]
Khi tôi biên dịch và chạy mã này tôi nhận được:
Vì vậy, câu hỏi của tôi là tại sao cả hai chủ đề này đều có cùng tên cho currentThread().getName()
? Khi chúng được tạo, chúng được chỉ định tên thông qua threadX.setName("XXX")
và các lần chạy này được bắt đầu bằng cách gọi threadX.start()
... Ai đó có thể làm rõ cho tôi điều này không?
EDIT: Tôi chấp nhận câu trả lời đúng vì thay đổi stRunnable thành stRunnable2 hành vi như mong đợi. Câu hỏi thực sự là tại sao điều này lại xảy ra. Tôi tạo ra hai chủ đề và bắt đầu chúng một cách riêng biệt. Làm thế nào là nó posibble rằng run() phương pháp (được gọi là một lần khi thread's tạo ra) trả về tên sai?
Bạn có thể gửi các bit của mã nơi bạn đang bắt đầu các chủ đề? – PearsonArtPhoto