Как стать автором
Обновить

Комментарии 43

НЛО прилетело и опубликовало эту надпись здесь
Он скорее в ужасе схватился за голову при виде такого кода.
Следующая за демонстрацией работы этого кода задача была — сделать так, чтобы потоки написали в лог свои сообщения строго в порядке нумерации (1,2,3...). Для этого надо было использовать wait() и notifyAll(). У вас есть решение этой задачи?
Можно вместо wait() и notifyAll() воспользоваться синхронизаторами — это намного эффективнее. CountDownLatch, CyclicBarrier, Exchanger, Semaphore — выбирай, как говорится, любой на вкус и под задачу.
Можно, но у нас задача — рассказать студентам о Java весело и доступно.
Теперь понятно, почему ява тормозит!
Имхо, решение с CountDownLatch намного веселее и доступней, чем wait/notify.
И правда! 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);
	}	
}



А можно поинтересоваться, что именно вы этим примером иллюстрируете? Меня больше всего смущает то, что lock у потоков не общий, т.е. хоть j и будет в итоге равно сто миллионов (или сто миллионов и один при некоторых таймингах), но общее количество итараций все равно будет больше ста миллионов.
Конечное значение i может быть как больше так и меньше ста миллионов.
Можно ещё дополнить, что в указанном примере приведены классические «гонки».
А можно будет где-нибудь почитать этот курс?
Да-да, было бы очень здорово прочитать такой замечательный по описанию курс.
Дык читайте, если есть такое желание. Вот автор уже прочитал. И Вы почитайте! Я уверен, что есть много вузов, в которых с удовольствием бы этот курс послушали. :)
На данный момент в свободном доступе есть только программа курса.
В этом семестре мы записываем лекции на видео и летом эти записи будут доступны всем, а не только студентам Технопарка.
Книги по курсу пока нет. Все наши курсы авторские. Материал собран из массы различных источников.
Не исключено, что мы выпустим сборник работ по нашим лекциям когда наберем достаточно материала и опыта.
Я бы посмотрел. Игры давняя мечта (Но я же джава программист! КАКИЕ ИГРЫ!). Надеюсь будет пост на хабре о появлении записей в общем доступе? Или может вы в онлайн вещаете?
Будет.
Не могу плюсовать. Не хватает силы. Я глянул видео, на которое ссылка, очень понравилось. Вот бы у нас во всех универах так преподавали. Эх.
May the Force be with you
Ok
Нотч смотрит на вас с удивлением.
Играл я в мк. Это мнение только укрепило почему то.
Дополню Виталия: мы готовим видеозаписи всех лекций и, отдельно, SCORM-курс (видео-модули по 15 минут с промежуточным тестированием). Если все пойдет удачно, то летом появится этот курс в формате e-learning.
НЛО прилетело и опубликовало эту надпись здесь
У меня в курс сеть не уместилась. Очень хотел сделать не многопоточный, а многопроцессный сервер. И под MessageSystem положить еще и сетевой уровень, чтобы сообщения передавать между абонентами на разных машинах.
На лекциях рассказать успею. Написать не успеем.
Да, оказалось, что никто из моих студентов в MUD не играл. Рассказывал истории из своего опыта.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
1. Как обстоят дела со смежными вопросами, с которыми в любом случае придется столкнуться при Java-разработке, но при этом Java по сути не является. Навскидку это минимум maven, системы контроля версий, реляционная модель базы данных, основы протокола HTTP и т.п. Это входит в программу курса или остается на самостоятельное обучение?
2. Есть ли идеи добавить в обучение симуляцию реального процесса разработки, например, таск/баг-трекинг, ревью кода, continues integration, группы тестирования и аналитики (хотя бы в примитивном виде), планы и дедлайны, agile-методологии и пр.?
1. Мой курс — курс второго семестра Технопарка. На первом семестре студенты изучали web технологии, алгоритмы и структуры данных и C++. Полная программа Технопарка здесь.
То есть подготовка по web, алгоритмам и языкам высокого уровня у них к началу изучения курса уже есть.
Параллельно с Java студенты изучают курс по базам данных и нагрузке.
К тому моменту как мы подходим к работе с базами из Java, курс по базам уже практически закончен.
2. Мы как раз думаем об изменении формата курса в еще большую сторону от теории к практике.
По моей задумке к концу семестра студенты должны сделать работу, которую можно будет показывать как прототип инвестору. А опыт разработки, полученный при ее написании, позволит считать группу студентов — коллективом разработчиков.
Как будут результаты — напишу.
Для полноты картины, рассказали бы, как передается изображение с сервера в браузер.
Не совсем понял предложение.
Механизм передачи? То есть то, как по сети в браузер уходит статика сайта? Об этом у студентов был курс web технологий.
То как отдавать статику? Статику можно отдавать из Jetty. Об этом я студентам рассказал.
Я имел ввиду, в каком формате изображение передается (передавать всю картинку на каждый кадр ведь накладно) и каким плагином оно в браузере воспроизводится.
кхм… Вы в курсе, что такое браузерные игры?
Абсолютно не в курсе.
Север формирует на каждый «кадр» html страницу. В минимальном варианте всю, в нормальном через ajax только нужный участок. Это текст который получает браузер и интерпретирует его. В тексте есть ссылки на картинки. Картинки неизменны (например это иконки танков или роботов). Эти картинки мы тоже можем отдавать из сервера как статику страницы.
Никаких плагинов для этого не нужно. Нужен браузер с поддержкой javascript: о)
Как интересно… И что, из отдельных картинок можно cформировать качественное изображение? Танк едет, он же поворачивается, и фон меняется.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий