🗊Презентация Расширенные возможности многопоточного программирования. Лекция 1

Нажмите для полного просмотра!
Расширенные возможности многопоточного программирования. Лекция 1, слайд №1Расширенные возможности многопоточного программирования. Лекция 1, слайд №2Расширенные возможности многопоточного программирования. Лекция 1, слайд №3Расширенные возможности многопоточного программирования. Лекция 1, слайд №4Расширенные возможности многопоточного программирования. Лекция 1, слайд №5Расширенные возможности многопоточного программирования. Лекция 1, слайд №6Расширенные возможности многопоточного программирования. Лекция 1, слайд №7Расширенные возможности многопоточного программирования. Лекция 1, слайд №8Расширенные возможности многопоточного программирования. Лекция 1, слайд №9Расширенные возможности многопоточного программирования. Лекция 1, слайд №10Расширенные возможности многопоточного программирования. Лекция 1, слайд №11Расширенные возможности многопоточного программирования. Лекция 1, слайд №12Расширенные возможности многопоточного программирования. Лекция 1, слайд №13Расширенные возможности многопоточного программирования. Лекция 1, слайд №14Расширенные возможности многопоточного программирования. Лекция 1, слайд №15Расширенные возможности многопоточного программирования. Лекция 1, слайд №16Расширенные возможности многопоточного программирования. Лекция 1, слайд №17Расширенные возможности многопоточного программирования. Лекция 1, слайд №18Расширенные возможности многопоточного программирования. Лекция 1, слайд №19Расширенные возможности многопоточного программирования. Лекция 1, слайд №20Расширенные возможности многопоточного программирования. Лекция 1, слайд №21Расширенные возможности многопоточного программирования. Лекция 1, слайд №22Расширенные возможности многопоточного программирования. Лекция 1, слайд №23

Содержание

Вы можете ознакомиться и скачать презентацию на тему Расширенные возможности многопоточного программирования. Лекция 1. Доклад-сообщение содержит 23 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Лекция 1
Расширенные возможности многопоточного программирования
Описание слайда:
Лекция 1 Расширенные возможности многопоточного программирования

Слайд 2





Высокоуровневые средства многопоточного программирования
Объекты блокировки (Locks)
Исполнители (Executors)
Коллекции (Concurrent collections)
Атомарные переменные (Atomic variables)
С версии 1.5
Пакет java.util.concurrent
Описание слайда:
Высокоуровневые средства многопоточного программирования Объекты блокировки (Locks) Исполнители (Executors) Коллекции (Concurrent collections) Атомарные переменные (Atomic variables) С версии 1.5 Пакет java.util.concurrent

Слайд 3





Reentrant lock
public void lock() 
public boolean tryLock() 
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException
public void lockInterruptibly() throws InterruptedException 
public void unlock() 
public int getHoldCount() 
public boolean isHeldByCurrentThread()
Описание слайда:
Reentrant lock public void lock() public boolean tryLock() public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException public void lockInterruptibly() throws InterruptedException public void unlock() public int getHoldCount() public boolean isHeldByCurrentThread()

Слайд 4





public class Safelock {
public class Safelock {
    static class Friend {
        private final String name;
        private final Lock lock = new ReentrantLock();
        public Friend(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        public boolean impendingBow(Friend bower) {
            Boolean myLock = false;
            Boolean yourLock = false;
            try {
                myLock = lock.tryLock();
                yourLock = bower.lock.tryLock();
            } finally {
                if (! (myLock && yourLock)) {
                    if (myLock) {
                        lock.unlock();
                    }
                    if (yourLock) {
                        bower.lock.unlock();
                    }
                }
            }
            return myLock && yourLock;
        }
Описание слайда:
public class Safelock { public class Safelock { static class Friend { private final String name; private final Lock lock = new ReentrantLock(); public Friend(String name) { this.name = name; } public String getName() { return this.name; } public boolean impendingBow(Friend bower) { Boolean myLock = false; Boolean yourLock = false; try { myLock = lock.tryLock(); yourLock = bower.lock.tryLock(); } finally { if (! (myLock && yourLock)) { if (myLock) { lock.unlock(); } if (yourLock) { bower.lock.unlock(); } } } return myLock && yourLock; }

Слайд 5





 public void bow(Friend bower) {
 public void bow(Friend bower) {
            if (impendingBow(bower)) {
                try {
                    System.out.format("%s: %s has bowed to me!%n", 
                            this.name, bower.getName());
                    bower.bowBack(this);
                } finally {
                    lock.unlock();
                    bower.lock.unlock();
                }
            } else {
                System.out.format("%s: %s started to bow to me, but" +
                        " saw that I was already bowing to him.%n",
                        this.name, bower.getName());
            }
        }
        public void bowBack(Friend bower) {
            System.out.format("%s: %s has bowed back to me!%n",
                    this.name, bower.getName());
        }
    }
Описание слайда:
public void bow(Friend bower) { public void bow(Friend bower) { if (impendingBow(bower)) { try { System.out.format("%s: %s has bowed to me!%n", this.name, bower.getName()); bower.bowBack(this); } finally { lock.unlock(); bower.lock.unlock(); } } else { System.out.format("%s: %s started to bow to me, but" + " saw that I was already bowing to him.%n", this.name, bower.getName()); } } public void bowBack(Friend bower) { System.out.format("%s: %s has bowed back to me!%n", this.name, bower.getName()); } }

Слайд 6





 
 
static class BowLoop implements Runnable {
        private Friend bower;
        private Friend bowee;
        public BowLoop(Friend bower, Friend bowee) {
            this.bower = bower;
            this.bowee = bowee;
        }
    
        public void run() {
            Random random = new Random();
            for (;;) {
                try {
                    Thread.sleep(random.nextInt(10));
                } catch (InterruptedException e) {}
                bowee.bow(bower);
            }
        }
    }
    public static void main(String[] args) {
        final Friend alphonse = new Friend("Alphonse");
        final Friend gaston = new Friend("Gaston");
        new Thread(new BowLoop(alphonse, gaston)).start();
        new Thread(new BowLoop(gaston, alphonse)).start();
    }
}
Описание слайда:
static class BowLoop implements Runnable { private Friend bower; private Friend bowee; public BowLoop(Friend bower, Friend bowee) { this.bower = bower; this.bowee = bowee; } public void run() { Random random = new Random(); for (;;) { try { Thread.sleep(random.nextInt(10)); } catch (InterruptedException e) {} bowee.bow(bower); } } } public static void main(String[] args) { final Friend alphonse = new Friend("Alphonse"); final Friend gaston = new Friend("Gaston"); new Thread(new BowLoop(alphonse, gaston)).start(); new Thread(new BowLoop(gaston, alphonse)).start(); } }

Слайд 7





Затвор
CountDownLatch – класс, позволяющий потокам ожидать окончания операций, выполняемые другими потоками. Счетчик задается в конструкторе.
countDown() – уменьшает счетчик на 1.
await() – блокирует поток, пока счетчик не 0.
Описание слайда:
Затвор CountDownLatch – класс, позволяющий потокам ожидать окончания операций, выполняемые другими потоками. Счетчик задается в конструкторе. countDown() – уменьшает счетчик на 1. await() – блокирует поток, пока счетчик не 0.

Слайд 8





Барьер
CyclicBarrier – барьер. Потоки «подходят» к барьеру и ожидают последнего (количество задается в конструкторе)
await() – блокирует поток до наступления одного из событий:
подошел последний поток
Текущий поток был прерван
Один из ожидающих у барьера потоков был прерван
Один из ожидающий у барьера потоков закончил ожидать по таймауту
Кто-то вызвал метод reset() у барьера
Описание слайда:
Барьер CyclicBarrier – барьер. Потоки «подходят» к барьеру и ожидают последнего (количество задается в конструкторе) await() – блокирует поток до наступления одного из событий: подошел последний поток Текущий поток был прерван Один из ожидающих у барьера потоков был прерван Один из ожидающий у барьера потоков закончил ожидать по таймауту Кто-то вызвал метод reset() у барьера

Слайд 9





Семафор
Semaphore позволяет ограничить доступ к ресурсу до нескольких потоков.
Конструктор Semaphore(int permits)
acquire()
release()
tryAcquire()
Описание слайда:
Семафор Semaphore позволяет ограничить доступ к ресурсу до нескольких потоков. Конструктор Semaphore(int permits) acquire() release() tryAcquire()

Слайд 10





ReadWriteLock
ReadWriteLock позволяет синхронизовать потоки, желающие получить доступ на чтение или на запись.
Методы ReadWriteLock:
Lock readLock()
Lock writeLock()
Механизм представлен в виде класса ReentrantReadWriteLock
Описание слайда:
ReadWriteLock ReadWriteLock позволяет синхронизовать потоки, желающие получить доступ на чтение или на запись. Методы ReadWriteLock: Lock readLock() Lock writeLock() Механизм представлен в виде класса ReentrantReadWriteLock

Слайд 11





Исполнители
Интерфейс Executor
new Thread(r)).start(); 
Заменяется на:
e.execute(r); 
Интерфейс ExecutorService
execute(Runnable r) и Future Submit(Callable c)
Интерфейс ScheduledExecutorService
Позволяет выполнять задачи с определенной задержкой
Описание слайда:
Исполнители Интерфейс Executor new Thread(r)).start(); Заменяется на: e.execute(r); Интерфейс ExecutorService execute(Runnable r) и Future Submit(Callable c) Интерфейс ScheduledExecutorService Позволяет выполнять задачи с определенной задержкой

Слайд 12





Runnable и Callable
Runnable – выполяемая задача
Callable<T> – выполняемая задача, имеющая результат.
public class Factorial implements Callable<Long> {
    public Factorial(int n) {
       this.n = n;
    }
    public Long call() {
       int res = 1;
       for (int i = 1; i < n; i++)
          res *= n;
       return n;
    }
}
Описание слайда:
Runnable и Callable Runnable – выполяемая задача Callable<T> – выполняемая задача, имеющая результат. public class Factorial implements Callable<Long> { public Factorial(int n) { this.n = n; } public Long call() { int res = 1; for (int i = 1; i < n; i++) res *= n; return n; } }

Слайд 13





Класс Future
Метод Future<T> submit(Callable<T> c) интерфейса ExecutorService возвращает объект Future<T>.
Методы Future:
boolean isDone() 
V get() throws InterruptedException, ExecutionException 
V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException 
boolean cancel(boolean mayInterruptIfRunning) 
boolean isCancelled()
Описание слайда:
Класс Future Метод Future<T> submit(Callable<T> c) интерфейса ExecutorService возвращает объект Future<T>. Методы Future: boolean isDone() V get() throws InterruptedException, ExecutionException V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException boolean cancel(boolean mayInterruptIfRunning) boolean isCancelled()

Слайд 14





Пулы потоков
Пулы потоков предназначены для параллельного выполнения задач Runnable и Callable.
Класс Executors предоставляет:
public static ExecutorService newSingleThreadExecutor() 
public static ExecutorService newFixedThreadPool(int nThreads) 
public static ExecutorService newCachedThreadPool()
Описание слайда:
Пулы потоков Пулы потоков предназначены для параллельного выполнения задач Runnable и Callable. Класс Executors предоставляет: public static ExecutorService newSingleThreadExecutor() public static ExecutorService newFixedThreadPool(int nThreads) public static ExecutorService newCachedThreadPool()

Слайд 15





Интерфейс BlockingQueue
boolean add(E e) 
boolean remove(Object o) 
boolean offer(E e) 
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException 
void put(E e) throws InterruptedException 
E take() throws InterruptedException 
E poll(long timeout, TimeUnit unit) throws InterruptedException 
E element() 
E peek()
Описание слайда:
Интерфейс BlockingQueue boolean add(E e) boolean remove(Object o) boolean offer(E e) boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException void put(E e) throws InterruptedException E take() throws InterruptedException E poll(long timeout, TimeUnit unit) throws InterruptedException E element() E peek()

Слайд 16





Сводка по методам
Описание слайда:
Сводка по методам

Слайд 17





Коллекции
Интерфейс BlockingQueue имеет реализации:
ArrayBlockingQueue
DelayQueue
LinkedBlockingQueue
PriorityBlockingQueue
SynchronousQueue
LinkedBlockingDeque
Описание слайда:
Коллекции Интерфейс BlockingQueue имеет реализации: ArrayBlockingQueue DelayQueue LinkedBlockingQueue PriorityBlockingQueue SynchronousQueue LinkedBlockingDeque

Слайд 18





Атомарные операции
Данный класс не приспособлен для использования из разных потоков
class Counter {
    private int c = 0;
    public void increment() {
        c++;
    }
    public void decrement() {
        c--;
    }
    public int value() {
        return c;
    }
}
Описание слайда:
Атомарные операции Данный класс не приспособлен для использования из разных потоков class Counter { private int c = 0; public void increment() { c++; } public void decrement() { c--; } public int value() { return c; } }

Слайд 19





Атомарные операции
Атомарными операциями являются:
Чтение и запись ссылок на объекты
Чтение и запись значений переменных примитивных типов (за исключением long и double)
Чтение и запись значение переменных любых типов, объявленных как volatile
Описание слайда:
Атомарные операции Атомарными операциями являются: Чтение и запись ссылок на объекты Чтение и запись значений переменных примитивных типов (за исключением long и double) Чтение и запись значение переменных любых типов, объявленных как volatile

Слайд 20





Атомарные операции
Объекты данного класса может использоваться из разных потоков, но не эффективно.
class SynchronizedCounter {
    private int c = 0;
    public synchronized void increment() {
        c++;
    }
    public synchronized void decrement() {
        c--;
    }
    public synchronized int value() {
        return c;
    }
}
Описание слайда:
Атомарные операции Объекты данного класса может использоваться из разных потоков, но не эффективно. class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; } public synchronized void decrement() { c--; } public synchronized int value() { return c; } }

Слайд 21





Атомарные переменные
class AtomicCounter {
    private AtomicInteger c = new AtomicInteger(0);
    public void increment() {
        c.incrementAndGet();
    }
    public void decrement() {
        c.decrementAndGet();
    }
    public int value() {
        return c.get();
    }
}
Описание слайда:
Атомарные переменные class AtomicCounter { private AtomicInteger c = new AtomicInteger(0); public void increment() { c.incrementAndGet(); } public void decrement() { c.decrementAndGet(); } public int value() { return c.get(); } }

Слайд 22





Классы атомарных переменных
AtomicBoolean
AtomicInteger
AtomicLong
AtomicReference
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
Описание слайда:
Классы атомарных переменных AtomicBoolean AtomicInteger AtomicLong AtomicReference AtomicIntegerArray AtomicLongArray AtomicReferenceArray

Слайд 23





Методы классов атомарных переменных
get()
set(value)
getAndSet(value)
compareAndSet(expect, newValue)
Для чисел:
addAndGet(delta)
getAndAdd(delta)
getAndDecrement()
getAndIncrement()
incrementAndGet()
decrementAndGet()
Описание слайда:
Методы классов атомарных переменных get() set(value) getAndSet(value) compareAndSet(expect, newValue) Для чисел: addAndGet(delta) getAndAdd(delta) getAndDecrement() getAndIncrement() incrementAndGet() decrementAndGet()



Похожие презентации
Mypresentation.ru
Загрузить презентацию