Среди знаний в Java программы продаж билетов очень классические. Есть также некоторые проблемы в программе!
Требования: моделируйте 100 билетов в продажу одновременно в 3 окнах.
Вопрос 1: Почему 300 билетов продаются?
Причина: поскольку билеты являются нестатическими, нестатическими переменными переменными, будут хранить одну часть данных в каждом объекте, а также будет три фрагменты из трех объектов потока.
Решение: поделитесь номером билетов для трех объектов потока. Используйте статическую модификацию.
Вопрос 2: Есть ли проблема безопасности потока?
Решение задач безопасности потока: Sun обеспечивает механизм синхронизации потока для нас, чтобы решить этот тип проблемы.
Как синхронизировать Java Threads:
Метод 1: синхронизировать кодовые блоки
Метод 2: Синхронная функция
Class Selltickets Extends Thread {Static Int Tilets = 1; // Количество голосов должно быть определена как статическое здесь. В противном случае, нестатические переменные-члены и нестатические данные переменной-членов будут поддерживать часть данных в каждом объекте. Там будет три копии из трех объектов потока. public selltickets (String threadname) {super (threadname); } public void run () {while (true) {synchronized ("lock") {if (tickets == 101) {// или if (билеты> 100) {System.out.println ("Названия были проданы -_--..."); перерыв; } System.out.println (thread.currentThread (). GetName ()+"Продал номер"+билеты+"билет номер"); Билеты ++; /* if (билеты == 101) {// неправильно. Когда билет == 101, выпрыгивает только одна нить. Билеты ++ существуют в двух других темах. перерыв; } /* if (think.currentThread (). getName (). equals ("window 2")) {// окно 2 может продавать только один билет, а перерыв закончился; } */} //System.out.println(thread.currentthread (). GetName ()+"lock ..."); }}} открытый класс demo4 {public static void main (string [] args) {// Создание трех объектов потока и моделировать три Windows selltickets s1 = new selltickets ("window 1"); Selltickets S2 = новые Selltickets («Window 2»); Selltickets S3 = новые Selltickets («Window 3»); // Открыть билеты потока s1.start (); s2.start (); s3.start (); System.out.println ("Основной метод ..."); }}