1. Определите класс, который наследует класс Thread, переопределяет метод запуска в классе, вызывает метод запуска объекта класса, метод запуска запускает поток и вызывает метод запуска. Класс Thread используется для описания потоков; этот класс определяет запуск функции, которая используется для хранения кода, запускаемого потоком.
2. Определите класс для реализации интерфейса Runnable, переопределите методы в интерфейсе Runnable, создайте объект потока через класс Thread, передайте объект подкласса интерфейса Runnable в качестве фактического параметра конструктору класса Thread и вызовите метод start класса Thread для запуска потока. Будет вызван метод run в подклассе интерфейса Runnable;
Способ реализации интерфейса Runnable позволяет избежать ограничений, вызванных одиночным наследованием;
Резьба Т;
T.setMaemon(true);//Установить поток как фоновый поток; фоновый поток автоматически завершается, когда завершаются все потоки переднего плана;
T.notify();//Разбудим этот поток;
T.notifyAll();//Разбудим все потоки;
T.interrupt();//Прерывание потока;
Thread.sleep(100);//Приостанавливаем поток на 100 миллисекунд
синхронизировано: по умолчанию он блокируется сам; пользовательские объекты также могут быть заблокированы;
Должны выполняться два или более потоков. Несколько потоков используют одну и ту же блокировку. Необходимо гарантировать, что во время процесса синхронизации выполняется только один поток;
Определите синхронизацию: уточните, какие коды требуют многопоточного выполнения, уточните общие данные и уточните, какие операторы в многопоточном коде работают с общими данными;
класс Tickets реализует Runnable
{
частный int тик = 100;
public void run() { // публичный синхронизированный void run()
пока (отметьте > 0) {
синхронизировано (это) {
если (отметьте > 0) {
пытаться {
Thread.sleep(100);
} catch (InterruptedException e) {
е.printStackTrace();
}
System.out.println(this.toString() + "продажа:" + галочка--);
}
}
}
}
Как указано выше: тики — это общие данные. Для работы с тиками вам необходимо работать синхронно. Синхронизированными блокировками являются сами билеты;
Механизм ожидания пробуждения: при работе потоков синхронизации они должны идентифицировать блокировки, удерживаемые потоками, которыми они управляют. Только ожидающие потоки на одной и той же блокировке могут быть пробуждены путем уведомления об одной и той же блокировке. Разные блокировки не могут быть пробуждены. ; (то есть: ожидание и пробуждение должны быть одной и той же блокировкой)