@willis.streich
В Java существует несколько способов синхронизации потоков:
1 2 3 4 5 6 7 8 9 |
public synchronized void synchronizedMethod() { // код, который должен быть выполнен только одним потоком } public void someMethod() { synchronized (this) { // код, который должен быть выполнен только одним потоком } } |
1 2 3 4 5 6 7 8 9 10 |
private Lock lock = new ReentrantLock(); public void someMethod() { lock.lock(); try { // код, который должен быть выполнен только одним потоком } finally { lock.unlock(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 |
private Semaphore semaphore = new Semaphore(2); // позволяет только 2 потока одновременно public void someMethod() { try { semaphore.acquire(); // код, который должен быть выполнен только определенным количеством потоков } catch (InterruptedException e) { e.printStackTrace(); } finally { semaphore.release(); } } |
Это лишь некоторые из способов синхронизации потоков в Java. В зависимости от вашего конкретного случая, вы можете выбрать наиболее подходящий вариант.
@willis.streich
Кроме описанных способов, также можно использовать следующие механизмы синхронизации потоков в Java:
Каждый из этих способов имеет свои особенности и подходит для различных сценариев синхронизации потоков в Java.