01/10/2018, 17:11

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

Nguyễn Đình Anh viết 19:21 ngày 01/10/2018

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

Nguyễn Trần Minh Quang viết 19:17 ngày 01/10/2018

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 đó.

Nguyễn Đình Anh viết 19:15 ngày 01/10/2018

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.

Nguyễn Trần Minh Quang viết 19:22 ngày 01/10/2018

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

Trần Hoàn viết 19:17 ngày 01/10/2018

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 =]]]]

Nguyễn Đình Anh viết 19:18 ngày 01/10/2018

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é
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

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

Case%201Case3Case3

Quân viết 19:27 ngày 01/10/2018

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

Nguyễn Trần Minh Quang viết 19:17 ngày 01/10/2018

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

Quân viết 19:20 ngày 01/10/2018

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

Bài liên quan
0