JavaRush /Java-Blog /Random-DE /Thread unterbrechen
Pegas
Level 34
Гродно

Thread unterbrechen

Veröffentlicht in der Gruppe Random-DE
Ich habe zwei Klassen skizziert, die von erben Runnable. Sie haben eine einfache Füllung (Thread.sleep und sout). Ich habe versucht, Threads mit interruptedund zu unterbrechen isInterrupted. Aus irgendeinem Grund tritt die Unterbrechung nicht auf, aber die Programmausführung gerät in eine Schleife und es tritt ein Fehler auf: Thread unterbrechen - 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)
Nachdem der Fehler aufgetreten ist, arbeiten die Threads unbegrenzt weiter. Wenn Sie jedoch Runnableden Aufruf aus den von geerbten Klassen entfernen Thread.sleep, läuft das Programm normal. Was ist das Problem, warum tritt der Fehler auf und warum wird das Programm nicht beendet? Hier 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();
    }
}
Erste Klasse:
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");
        }
    }
}
Zweite Klasse:
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");
        }
    }
}
Vielen Dank für Ihre Kommentare zum Thema)
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION