Апплеты, изображения и звук в JAVA

Билеты к экзамену по физике Примеры решения задач по физике
газета интим еще

Базовые понятия языка Java

Объектно-ориентированное программирование в Java

Работа со строками

Графические примитивы Построения графического интерфейса

Основные компоненты их размещение Обработка событий в JAVA Ультрамариновые краски Техника живописи

Создание меню

Апплеты

Изображения и звук

Обработка исключительных ситуаций

Подпроцессы, потоки ввода/вывода, сетевые средства

Коды примеров

Пример 1. Приложение, использующее потоки.

class WalkmanHire {

/* Прокат плееров-экскурсоводов J M Bishop Январь 1997
* Программа имитирует прокат плееров для посетителей музея.
* Имеется некоторое фиксированное количество плееров и не-
* сколько служащих, которые их выдают посетителям под денежный
* залог и принимают обратно с возвратом залога.

* По умолчанию имеется 50 плееров и 3 сотрудника. Эти значения
* можно изменить, если запустить программу с параметрами, на-
* пример,
* java WalkmanHire 100 8.
* Изначально сумма полученного залога равна 0.

* Иллюстрируют применение синхронизации, а также
* использование методов wait и notify.
* В программе одновременно используются потоки двух разных
* типов - класс "Группа посетитителей" и класс "Сотрудник"
*/

public static void main (String [] args) {

// получение числа плееров, начало имитации
// деятельности музея
if (args.length >= 1)
pool = Integer.parseInt(args[0]);
else pool = 50;
Museum m = new Museum (pool);

// получение количества сотрудников,
// создание и запуск потоков для имитации работы сотрудников
if (args.length >= 2)
helpers = Integer.parseInt(args[1]);
else helpers = 3;
for (int i=0; i<helpers; i++)
new Counter (m,i).start();
}
static int pool;
static int helpers;
}

import java.io.*;

class Museum {

Museum (int w) {
walkmen = w;
cash = 0;
}

synchronized void hire (int c,int n) {

// Если недостаточно свободных плееров,
// ждать, пока не будет произведен возврат количества,
// необходимого для текущей группы посетителей

System.out.println("Сотруднику "+c+" требуется "+n+
" плееров");
while (walkmen < n) {
try { wait(); }
catch (InterruptedException e) {}
}

// Выдать плееры и принять залог.
// Пробудить следующий поток, находящийся в состоянии
// ожидания.
walkmen -= n;
cash += n;
System.out.println("Сотрудник "+c+" выдал "+n+" плееров");
System.out.println("Текущее состояние:"+
" Залог: "+cash+" Всего: "+(walkmen+cash)
+ " Плееры в наличии: "+walkmen);
notify ();
}

synchronized void replace (int n) {

// Принять плееры, вернуть залог и пробудить следующий
// поток, находящийся в состоянии ожидания
System.out.println("Возвращено "+n+" плееров");
walkmen +=n;
cash -= n;
notify ();
}

private static int walkmen;
private static int cash;
}

class Visitors extends Thread {

Visitors (Museum m, int w) {
museum = m;
groupSize = w;
}

public void run () {

// Группа осматривает экспозицию музея в течение случайного
// интервала времени (от 1 до 2 секунд), затем возвращает
// плееры и покидает музей.
// Поток "Группа посетителей" уничтожается.
try {sleep((int) (Math.random()*1000)+1);} catch(InterruptedException e) {}
museum.replace(groupSize);
}

Museum museum;
int groupSize;
}

class Counter extends Thread {

Counter (Museum m, int q) {
museum = m;
queue = q;
}

public void run () {

// Генерируется количество посетителей в новой группе,
// выдается нужное количество плееров,
// создается и запускается объект-поток
// для группы посетителей.
while (true) {
int w = a(7);
museum.hire(queue, w);
new Visitors (museum, w).start();

// Генерируется пауза перед приходом
// следующей группы посетителей
try {sleep(a(100));} catch(InterruptedException e) {}
}
}

Museum museum;
int queue;

static int a (int x) {
return (int) (Math.random() * x) +1;
}
}

Математический анализ, лекции по физике Компьютерные сети