Комментарии 43
Он скорее в ужасе схватился за голову при виде такого кода.
Следующая за демонстрацией работы этого кода задача была — сделать так, чтобы потоки написали в лог свои сообщения строго в порядке нумерации (1,2,3...). Для этого надо было использовать wait() и notifyAll(). У вас есть решение этой задачи?
И правда! StringBuilder тут не нужен.
Я о нем как раз рассказывал до этого и в примере с кодом он остался.
Сейчас поправлю.
Этот код — пример того, что последовательность запуска потоков не определена.
Собственно эта неопределенность и привела вуки в замешательство.
Код демонстрационный, поэтому может быть избыточен.
Я о нем как раз рассказывал до этого и в примере с кодом он остался.
Сейчас поправлю.
Этот код — пример того, что последовательность запуска потоков не определена.
Собственно эта неопределенность и привела вуки в замешательство.
Код демонстрационный, поэтому может быть избыточен.
Пример не у Эндрю Тролсен взят?
Нет.
Пример как идея: «показать, что потоки могут быть запущены в произвольном порядке» вроде ни у кого заимствовать не надо. В любом языке с поддержкой потоков такой пример, мне кажется, обязательно надо на лекции показывать.
Пример как код… А что Тролсен про Java писал? Я только про C# знаю.
Пример как идея: «показать, что потоки могут быть запущены в произвольном порядке» вроде ни у кого заимствовать не надо. В любом языке с поддержкой потоков такой пример, мне кажется, обязательно надо на лекции показывать.
Пример как код… А что Тролсен про Java писал? Я только про C# знаю.
Если тема многопоточности всем так интересна, там еще один пример был:
public class ThreadInterference extends Thread {
private static final int HandredMillion = 100000000;
private static int i = 0;
private static int j = 0;
public void run(){
while( j < HandredMillion ){
i++;
synchronized (this) {
j++;
}
}
}
public static void example(){
Thread first = new ThreadInterference();
first.start();
Thread second = new ThreadInterference();
second.start();
try {
first.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("j: " + j + " i: " + i);
}
}
Hundred
А можно поинтересоваться, что именно вы этим примером иллюстрируете? Меня больше всего смущает то, что lock у потоков не общий, т.е. хоть
j
и будет в итоге равно сто миллионов (или сто миллионов и один при некоторых таймингах), но общее количество итараций все равно будет больше ста миллионов.Можно ещё дополнить, что в указанном примере приведены классические «гонки».
А можно будет где-нибудь почитать этот курс?
Да-да, было бы очень здорово прочитать такой замечательный по описанию курс.
Дык читайте, если есть такое желание. Вот автор уже прочитал. И Вы почитайте! Я уверен, что есть много вузов, в которых с удовольствием бы этот курс послушали. :)
На данный момент в свободном доступе есть только программа курса.
В этом семестре мы записываем лекции на видео и летом эти записи будут доступны всем, а не только студентам Технопарка.
Книги по курсу пока нет. Все наши курсы авторские. Материал собран из массы различных источников.
Не исключено, что мы выпустим сборник работ по нашим лекциям когда наберем достаточно материала и опыта.
В этом семестре мы записываем лекции на видео и летом эти записи будут доступны всем, а не только студентам Технопарка.
Книги по курсу пока нет. Все наши курсы авторские. Материал собран из массы различных источников.
Не исключено, что мы выпустим сборник работ по нашим лекциям когда наберем достаточно материала и опыта.
Я бы посмотрел. Игры давняя мечта (Но я же джава программист! КАКИЕ ИГРЫ!). Надеюсь будет пост на хабре о появлении записей в общем доступе? Или может вы в онлайн вещаете?
Дополню Виталия: мы готовим видеозаписи всех лекций и, отдельно, SCORM-курс (видео-модули по 15 минут с промежуточным тестированием). Если все пойдет удачно, то летом появится этот курс в формате e-learning.
У меня в курс сеть не уместилась. Очень хотел сделать не многопоточный, а многопроцессный сервер. И под MessageSystem положить еще и сетевой уровень, чтобы сообщения передавать между абонентами на разных машинах.
На лекциях рассказать успею. Написать не успеем.
На лекциях рассказать успею. Написать не успеем.
Да, оказалось, что никто из моих студентов в MUD не играл. Рассказывал истории из своего опыта.
1. Как обстоят дела со смежными вопросами, с которыми в любом случае придется столкнуться при Java-разработке, но при этом Java по сути не является. Навскидку это минимум maven, системы контроля версий, реляционная модель базы данных, основы протокола HTTP и т.п. Это входит в программу курса или остается на самостоятельное обучение?
2. Есть ли идеи добавить в обучение симуляцию реального процесса разработки, например, таск/баг-трекинг, ревью кода, continues integration, группы тестирования и аналитики (хотя бы в примитивном виде), планы и дедлайны, agile-методологии и пр.?
2. Есть ли идеи добавить в обучение симуляцию реального процесса разработки, например, таск/баг-трекинг, ревью кода, continues integration, группы тестирования и аналитики (хотя бы в примитивном виде), планы и дедлайны, agile-методологии и пр.?
1. Мой курс — курс второго семестра Технопарка. На первом семестре студенты изучали web технологии, алгоритмы и структуры данных и C++. Полная программа Технопарка здесь.
То есть подготовка по web, алгоритмам и языкам высокого уровня у них к началу изучения курса уже есть.
Параллельно с Java студенты изучают курс по базам данных и нагрузке.
К тому моменту как мы подходим к работе с базами из Java, курс по базам уже практически закончен.
2. Мы как раз думаем об изменении формата курса в еще большую сторону от теории к практике.
По моей задумке к концу семестра студенты должны сделать работу, которую можно будет показывать как прототип инвестору. А опыт разработки, полученный при ее написании, позволит считать группу студентов — коллективом разработчиков.
Как будут результаты — напишу.
То есть подготовка по web, алгоритмам и языкам высокого уровня у них к началу изучения курса уже есть.
Параллельно с Java студенты изучают курс по базам данных и нагрузке.
К тому моменту как мы подходим к работе с базами из Java, курс по базам уже практически закончен.
2. Мы как раз думаем об изменении формата курса в еще большую сторону от теории к практике.
По моей задумке к концу семестра студенты должны сделать работу, которую можно будет показывать как прототип инвестору. А опыт разработки, полученный при ее написании, позволит считать группу студентов — коллективом разработчиков.
Как будут результаты — напишу.
Для полноты картины, рассказали бы, как передается изображение с сервера в браузер.
Не совсем понял предложение.
Механизм передачи? То есть то, как по сети в браузер уходит статика сайта? Об этом у студентов был курс web технологий.
То как отдавать статику? Статику можно отдавать из Jetty. Об этом я студентам рассказал.
Механизм передачи? То есть то, как по сети в браузер уходит статика сайта? Об этом у студентов был курс web технологий.
То как отдавать статику? Статику можно отдавать из Jetty. Об этом я студентам рассказал.
Я имел ввиду, в каком формате изображение передается (передавать всю картинку на каждый кадр ведь накладно) и каким плагином оно в браузере воспроизводится.
кхм… Вы в курсе, что такое браузерные игры?
Север формирует на каждый «кадр» html страницу. В минимальном варианте всю, в нормальном через ajax только нужный участок. Это текст который получает браузер и интерпретирует его. В тексте есть ссылки на картинки. Картинки неизменны (например это иконки танков или роботов). Эти картинки мы тоже можем отдавать из сервера как статику страницы.
Никаких плагинов для этого не нужно. Нужен браузер с поддержкой javascript: о)
Никаких плагинов для этого не нужно. Нужен браузер с поддержкой javascript: о)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Разработка сервера браузерной игры… как учебная дисциплина