Здравствуйте. Как всегда, проблема не в использовании знаний Java, а в не понимании условия задачи. 1) Зачем в интерфейсе ReadFileInterface нужны методы join, start? Если наследоваться от Thread, то что делать с методом join? Если реализовывать Runnable, то как реализовывать методы join/start? 2) Четвёртое условие "Класс ReadFileThread должен быть унаследован от подходящего класса.". Ну и зачем тогда в начале задачи писать "Подумай, что больше подходит - Thread или Runnable", если автор задачи сам отвечает на свой же вопрос?