Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Как запрограммировать исполнение отдельного потока в Java

Для запуска отдельного потока нужно выполнить 3 шага:

1. Создать объект типа Thread

2. Загрузить в этот Thread программный код

3. Запустить, вызвав у объекта Thread метод start()

Варианты:

1) Создаю свой собственный класс, расширяющий класс Thread
в методе run() будут программные коды, которые будут исполняться

class MyThread extends Thread
{
public void run()
{

}
public My(){this.start()}
}
MyThread t = new MyThread();//когда я выполняю конструктор, я в конструкторе запускаю его

2) Есть интерфейс Runnable, внутри его метод run(), внутри которого программный код, передаем в качестве аргумента объект мой с программными кодами
Class My2 implements Runnable
{
public void run(){
...
}
}
Thread t = new Thread(new My2());//1,2
t.start();//3

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

Либо синхронизируем методы класса и над этим конкретным объектом можно будет вызвать синхронизирующие методы, либо явно synchronized (объект внутри него). Когда мы включаем synchronized, включается монитор.

На методе stop() – уничтожается, на pause() – останавливается, но сохраняется в памяти, на resume() – продолжает выполнение из памяти. При вызове start() два раза, первый раз он будет создан, во второй проигнорирован, при pause() мы замораживаем поток снаружи, но он может входить в секции синхронизации, и его заморозка не отключает монитор. Замороженный поток будет удерживать синхронизацию объекта, высокая вероятность взаимной блокировки, замороженный объект удерживает ресурсы. Заморозка объекта извне – крайне опасная операция. Если мы останавливаем объекты при помощи stop(), то завершается его исполнение и его объекты не попадают в список изначальных объектов для трассировки, ресурсы освобождены не будут, если есть ссылки на этот объект, они будут считаться живыми. Только после finalize() при сборке мусора будут освобождены ресурсы. Поэтому метод stop() тоже не очень здорово. Логично ими пользоваться, когда у нас есть потоки, явно выполняющие вычислительные действия и вы хотите их явно приостановить. Во всех остальных случаях заведите переменную флаг, которая будет в методе run() семафорить.

Лабораторная работа №5

Разработать многопоточное графическое приложение ///java, есть два окна, в каждом из них текстовое поле. При вводе текстовых данных в одно поле, данные отображаются в другом. Проброс данных сделать в разделяемом потоке, у нас должна быть глобальная переменная volatile, один чисто читатель, один чисто писатель, должна быть синхронизация. Пока не дойдут данные до читателя, новые данные не писать, чтобы не испортить их.

<== предыдущая лекция | следующая лекция ==>
Синхронизация в Java | Система кэширования
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 306; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.