Що таке 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