Knigionline.co » Программное обеспечение » Java руководство для начинающих

Java руководство для начинающих - Шилдт Герберт (2012)

Java руководство для начинающих
  • Год:
    2012
  • Название:
    Java руководство для начинающих
  • Автор:
  • Жанр:
  • Оригинал:
    Английский
  • Язык:
    Русский
  • Издательство:
    Вильямс
  • Страниц:
    316
  • ISBN:
    978-5-8459-1770-6
  • Рейтинг:
    4.3 (4 голос)
  • Ваша оценка:
"Java: руководство для начинающих", автором которого является Герберт Шилдт, а также на его счету популярные по всему миру книги по языкам программирования, таким образом, чтобы у читателя получилось быстро освоить основные навыки программирования на Java. Полностью обновленное по версии Java Platform, Standard Edition 7, пятое издание этого учебного пособия начинается с обзора самых простейших основ, не исключая выполнение простых программ на Java и компилирование. Далее в нем описаны синтаксические конструкции и ключевые слова составляющие основу Java как языка программирования. Затем следует изложение наиболее передовых языковых средств Java, включая многопоточное и обобщенное программирование. Книга завершается введением в библиотеку Swing. Использованный в книге справочный и учебный материал позволяет читателю быстро и легко освоить основы программирования на Java. В целях упрощения процесса изучения Java, учебник построен следующим образом: - Базовые понятия и навыки. Все главы начинаются с перечня базовых понятий и навыков, которые будет необходимо усвоить читателю. - Обращение к знатоку. Во врезках под этим заголовком даны полезные рекомендации в форме вопрос-ответ. - Примеры для опробования. Это примеры небольших проектов, наглядно показывающие, как применять полученные навыки и знания на практике. - Упражнения для самопроверки. В конце каждой главы присутствуют контрольные вопросы и задания для проверки прочности изученного материала. - Подробные комментарии к примерам программ. Все примеры программ в этом учебном пособии снабжены подробными комментариями, которые описывают приемы программирования Java и демонстрируемые языковые средства.

Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги

Когда синхронизированный метод завершается, разблокируется объект, для которого он вызывается.

Синхронизированные блоки

Несмотря на то что создание синхронизированных методов в классах — простой и эффективный способ управления потоками, такой способ оказывается пригодным далеко не всегда. Иногда возникает потребность синхронизировать доступ к методам, в объявлении которых отсутствует ключевое слово synchronized. Подобная ситуация часто возникает при использовании классов, которые были созданы независимыми разработчиками и исходный код которых недоступен. В таком случае ввести в объявление нужного метода ключевое слово synchronized вряд ли удастся. Как же тогда синхронизировать объект класса, содержащего этот метод? К счастью, данное затруднение разрешается очень просто. Достаточно ввести вызов метода в синхронизированный кодовый блок типа synchronized.

Синхронизированный блок определяется следующим образом:

synchronized{ссылка_на_объект) {

// синхронизируемые операторы

}

где ссылканаобъект обозначает ссылку на конкретный объект, который должен быть синхронизирован. Как только содержимое синхронизированного блока получит управление, ни один другой поток не сможет вызвать метод для объекта, на который делается ссылканаобъект9 до тех пор, пока этот кодовый блок не завершится.

Следовательно, обращение к методу sumArray () можно синхронизировать, вызвав его из синхронизированного блока. Такой способ демонстрируется в приведенной ниже переделанной версии предыдущей программы.

// Применение синхронизированного блока

// для управления доступом к методу sumArray().

class SumArray {

private int sum;

// Здесь метод sumArray () не синхронизирован.

int sumArray(int nums[]) {

sum =0; // обнулить сумму

for(int i=0; icnums.length; i++) {

sum += nums[i];

System.out.println("Running total for " +

Thread.currentThread().getName() +

" is " + sum);

try {

Thread.sleep(10); // разрешить переключение задач

}

catch(InterruptedException exc) {

System.out.println("Main thread interrupted.");

}

}

return sum;

}

}

class MyThread implements Runnable {

Thread thrd;

static SumArray sa = new SumArray();

int a[];

int answer;

// построить новый поток

MyThread(String name, int nums[]) {

thrd = new Thread(this, name);

a = nums;

thrd.start(); // начать поток

}

// начать исполнение нового потока

public void run() {

int sum;

System.out.println(thrd.getName() + " starting.");

// Здесь вызовы метода sumArray () для объекта sa синхронизированы.

synchronized(sa) {

answer = sa.sumArray(a);

}

System.out.println("Sum for " + thrd.getName() +

" is " + answer);

System.out.println(thrd.getName() + " terminating.");

}

}

class Sync {

public static void main(String args[]) {

int a [] = {1, 2, 3, 4, 5};

MyThread mtl = new MyThread("Child #1", a);

MyThread mt2 = new MyThread("Child #2", a);

try {

mtl.thrd.join();

mt2.thrd.join();

} catch (InterruptedException exc) {

System.out.println("Main thread interrupted.");

}

}

}

Выполнение этой версии программы дает такой же правильный результат, как и предыдущей ее версии, в которой использовался синхронизированный метод.

Организация взаимодействия потоков с помощью методов notify (), wait () и notifyAll ()

Перейти
Наш сайт автоматически запоминает страницу, где вы остановились, вы можете продолжить чтение в любой момент
Оставить комментарий