JavaRush /Java Blog /Random-ID /Interupsi utas
Pegas
Level 34
Гродно

Interupsi utas

Dipublikasikan di grup Random-ID
Saya membuat sketsa dua kelas yang diwarisi dari Runnable. Mereka memiliki isian yang sederhana (Thread.sleep dan sout). Saya sedang mencari cara untuk menginterupsi thread menggunakan interrupteddan isInterrupted. Untuk beberapa alasan, interupsi tidak terjadi, tetapi eksekusi program berputar-putar dan terjadi kesalahan: Interupsi utas - 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)
Setelah kesalahan terjadi, thread terus bekerja tanpa batas waktu. Tetapi jika Anda menghapus Runnablepanggilan dari kelas yang diwarisi Thread.sleep, maka program akan berjalan normal. Apa masalahnya, mengapa terjadi kesalahan dan mengapa program tidak berhenti? 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();
    }
}
Kelas satu:
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 komentar Anda tentang topik ini)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION