JavaRush /Blog Java /Random-VI /Làm gián đoạn chủ đề
Pegas
Mức độ
Гродно

Làm gián đoạn chủ đề

Xuất bản trong nhóm
Tôi đã phác thảo hai lớp kế thừa từ Runnable. Chúng có cách làm đơn giản (Thread.sleep và sot). Tôi đang xem xét các luồng bị gián đoạn bằng cách sử dụng interruptedisInterrupted. Vì lý do nào đó, sự gián đoạn không xảy ra nhưng quá trình thực thi chương trình đi vào vòng lặp và xảy ra lỗi: Làm gián đoạn chủ đề - 1
java.lang.InterruptedException: sleep interrupted
	at java.lang.Thread.sleep(Native Method)
	at com.javarush.test.myExample.example.thread.Producer.run(Producer.java:15)
	at java.lang.Thread.run(Thread.java:745)
java.lang.InterruptedException: sleep interrupted
	at java.lang.Thread.sleep(Native Method)
	at com.javarush.test.myExample.example.thread.Consumer.run(Consumer.java:15)
	at java.lang.Thread.run(Thread.java:745)
Sau khi xảy ra lỗi, các luồng sẽ tiếp tục hoạt động vô thời hạn. Nhưng nếu bạn xóa lệnh Runnablegọi khỏi các lớp được kế thừa từ Thread.sleep, thì chương trình sẽ chạy bình thường. Vấn đề là gì, tại sao xảy ra lỗi và tại sao chương trình không kết thúc? Đây main:
public class Solution
{
    public static void main(String[] args) throws InterruptedException
    {
        Thread thread1 = new Thread(new Producer());
        Thread thread2 = new Thread(new Consumer());

        thread1.start();
        thread2.start();

        Thread.sleep(1500);

        thread1.interrupt();
        thread2.interrupt();
    }
}
Lớp một:
public class Producer implements Runnable
{
    @Override
    public void run()
    {
        while (!Thread.interrupted())
        {
            try
            {
                Thread.sleep(100);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            System.out.println("Producer");
        }
    }
}
Lớp thứ hai:
public class Consumer implements Runnable
{
    @Override
    public void run()
    {
        while (!Thread.interrupted())
        {
            try
            {
                Thread.sleep(100);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            System.out.println("Consumer");
        }
    }
}
Cảm ơn ý kiến ​​​​của bạn về chủ đề này)
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION