В условии для while четко прописано
while (!thread.isInterrupted())
Однако бесконечный цикл продолжает работать после вызова у нити метода interrupt.
package com.javarush.task.task25.task2506;
public class LoggingStateThread extends Thread {

    private Thread thread;

    public LoggingStateThread(Thread thread) {
        this.thread = thread;
    }

    @Override
    public void run() {
        String state = thread.getState().toString();
        System.out.println(state);


        while (!thread.isInterrupted()){

            if(!state.equals(thread.getState().toString())){
                System.out.println(thread.getState().toString());
            }

        }
    }
}
package com.javarush.task.task25.task2506;

/*
Мониторинг состояния нити
*/
public class Solution {
    public static void main(String[] args) throws InterruptedException {
        Thread target = new Thread();
        LoggingStateThread loggingStateThread = new LoggingStateThread(target);

        loggingStateThread.start(); //NEW
        Thread.sleep(100);
        target.start();  //RUNNABLE
        Thread.sleep(100);
        //TERMINATED
        target.interrupt();


    }
}