Що таке concurrency і які є concurrency класи stack overflow російською
Concurrency це робота з багатопотоковим кодом.
Зазвичай під цим розуміють:
Управління (створення / запуск / зупинка) потоками віртуальної машини Java (які "нитки", threads). Код в кожному такому потоці може виконуватися паралельно з кодом в інших потоках. Таким чином, кілька завдань можуть бути виконані як би одночасно. Тут потрібно розібратися з такими поняттями як потоки, пули потоків, футуро.
- java.lang.Thread
- java.lang.Runnable
- java.util.concurrent.Callable
- java.util.concurrent.Executor
- java.util.concurrent.Executors
- java.util.concurrent.ThreadFactory
Управління потоком виконання програми (синхронізація потоків). Постійно виникають ситуації, коли код в одному потоці повинен дочекатися завершення виконання завдання в іншому потоці. Це досягається застосуванням різноманітних інструментів синхронізації. Важлива в даному контексті проблема - взаємне блокування потоків (deadlock), коли кілька потоків очікують чогось один від одного.
- java.lang.Object. wait (). notify (). notifyAll ()
- java.util.concurrent.locks. *
- java.util.concurrent.CountDownLatch
- java.util.concurrent.Semaphore
- java.util.concurrent.CyclicBarrier
- java.util.concurrent.Exchanger
- java.util.concurrent.Phaser
Управління доступом до пам'яті (до даних) в багатопотокової середовищі. Тут важливе розуміння моделі пам'яті Java (Java Memory Model), видимості змінних, атомарности операцій і виникнення станів гонок. потокобезпечна колекцій.
Для глибокого розуміння рекомендую прочитати:
Concurrency - коротко можливість виконання 2-ох і більше код стейтменті одночасно. Уявіть, що код це вода, яка тече по трубі. Необхідно відкачати воду з А в Б (аналогія виконання коду від старту - main до фінішу - exit). З огляду на, що не можна змінити розмір труби, ми просто додаємо ще 1 трубу. Отже, в теорії ми отримуємо більшу швидкість. Кількість "труб", які будуть використовуватися з користю, залежить від кол-ва ядер у процесора.
Класів досить багато і їх можна знайти під java.util.concurrent. Також раджу почитати офіційну документацію. З приводу використання, все залежить для чого Ви збираєтеся це робити. Примітивний приклад:
Покращений приклад буде використовувати ExecutorService або подібні класи. Раджу почитати тут.
відповідь даний 4 Вересня '15 о 9:59