boolean isCurrentThreadInterrupted = Thread.currentThread().isInterrupted();
String threadName = Thread.currentThread().getName();

try {
    while (!isCurrentThreadInterrupted) {
        System.out.println("Объект " + sharedResource + ", нить " + threadName);
        Thread.sleep(1000);
    }
} catch (InterruptedException e) {
}
я думаю, что run запускается один раз и соответственно boolean isCurrentThreadInterrupted и String threadName должны присваиваться по одному разу на каждый поток, но в цикле идет проверка isCurrentThreadInterrupted, как поток завершается, если isCurrentThreadInterrupted принимает значение до цикла? Или по InterruptedException завершается, тогда зачем проверка !isCurrentThreadInterrupted?