While ko break ngay cả khi đã đúng điều kiện

package com.Quang1999.main;

public class TimingThread extends Thread {

    public void run(){
        long now, begin = System.currentTimeMillis(), start = begin;
        while(main.checked < 1){
            now = System.currentTimeMillis();
            if(now - start >= 10000){
                System.out.println("Time taken: " + (now - begin) + "ms");
                start = now;
            }
        }
    }

}

Mặc dù checked đã = 1 nhưng mà mãi đến ~10s thì vòng lặp mới break

main.checked Trả về gì vậy bạn ?

nó bị thay đổi bởi 1 thread khác nha bạn, nhưng mà sau khi set checked = 1 rồi mà nó vẫn ko break cái while đó.

Vậy thì có thể là do cái Thread thay đổi giá trị của main.checked chạy sau TimingThread. Dùng Thread có một cái rất đau đầu là khi bạn chạy 2 Thread thì nó sẽ không chạy theo một thứ tự nào cả @@ Đôi khi lại là Thread 1 chạy trước, nhưng có khi Thread 2 lại chạy trước.

2 thread chạy cùng lúc bạn à cơ mà nếu mình print cái main.checked ra thì nó chịu dừng còn ko thì nó vẫn ko chịu dừng

Bạn gọi 2 thread liên tiếp không có nghĩa là nó chạy 2 cái đúng thứ tự đó.Hồi trước mình kiểm soát thread không tốt, tắt chương trình rồi mà có thread vẫn chạy nên bị NullPointerException =]]]]

1 Like

Bạn chạy 2 Thread cùng một lúc thì cũng không có nghĩa là nó sẽ chạy theo thứ tự định sẵn nhé :frowning:
Ví dụ mình có một Thread như này:

public class Test_Thread extends Thread
{
    private String name;

    public Test_Thread(String name) 
    {
        this.name = name;
    }
    
    @Override
    public void run()
    {
        for(int i = 0; i < 3; i++)
        {
            System.out.println("Thread " + this.name + " - Time: " + i);
        }
    }
    
}

Thì khi mình chạy đoạn code này 3 lần thì nó vẫn sẽ ra ba kết quả khác nhau :smile:

new Test_Thread("1").start();
new Test_Thread("2").start();

Case%201Case3Case3

Làm ơn post câu hỏi có tâm chút đi bạn, đưa 1 mẩu code không đầy đủ lên rồi mong nhận được câu trả lời đúng và nhanh thì khó lắm. Mình đã đoán được 99% lí do cho bạn rồi nhưng đợi bạn post nốt đoạn code liên quan lên đã rồi kết luận

2 Likes

đoạn code sau chẳng qua là gửi request lên server rồi main.checked++; thôi bạn

Mình ghét nhất là kiểu úp úp mở mở như của bạn, nếu muốn được giúp đỡ thì nên post những thứ liên quan lên, có những thứ bạn cho là không quan trọng nhưng nó lại là chìa khóa của vấn đề. Không mô tả, không giả định rằng mọi người biết tất cả những gì bạn biết, đấy là nguyên tắc để có một câu hỏi chất lượng

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?