JavaRush /Blog Java /Random-MS /Mengganggu benang
Pegas
Tahap
Гродно

Mengganggu benang

Diterbitkan dalam kumpulan
Saya melakar dua kelas yang mewarisi daripada Runnable. Mereka mempunyai pengisian yang mudah (Benang.sleep dan sout). Saya sedang mencari untuk mengganggu benang menggunakan interrupteddan isInterrupted. Atas sebab tertentu, gangguan tidak berlaku, tetapi pelaksanaan program masuk ke dalam gelung dan ralat berlaku: Mengganggu benang - 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)
Selepas ralat berlaku, benang terus berfungsi selama-lamanya. Tetapi jika anda mengalih keluar Runnablepanggilan daripada kelas yang diwarisi daripada Thread.sleep, maka program berjalan seperti biasa. Apakah masalahnya, mengapa ralat berlaku dan mengapa program tidak ditamatkan? di sini 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();
    }
}
Gred pertama:
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");
        }
    }
}
Kelas kedua:
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");
        }
    }
}
Terima kasih atas komen anda tentang topik)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION