Q:

Передача объекта при создании потока и вызов метода sleep

public class SynTest {
    public static void main(String[] args) throws InterruptedException {
        Thread1 t1 = new Thread1();
        Thread t = new Thread(t1);
        t.start();
        Thread.sleep(5);
    }
}

Что даёт передача экземпляра класса (t1) как аргумента в поток?
Почему мы используем класс-обертку (наверное) Thread для .sleep?
Не нужно ли использовать имя переменной потока, который уже стартовал, т.е. t.sleep(5)? Или это ошибка у автора кода?
public class Thread1 implements Runnable {
    @Override
    public void run() {
        a("Thread1");
    }

    synchronized void a(String s)  {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(s + " метод а");
    }
}

A:

В конструктор Thread передаётся объект, реализующий интерфейс Runnable. Когда поток запускается, вызывается метод run у переданного объекта. Наличие у объекта метода run гарантируется как раз имплементацией интерфейса Runnable.
Метод Thread.sleep заставляет текущий (в котором вызван данный метод) поток приостановить своё выполнение на заданное время. Нестатического метода sleep в классе Thread вообще нет.

