# Многопоточность

- Одновременное выполнение нескольких действий
- Ускорение вычислений
### Закон Амдала

$$
S(N) = 1/((1-P)+ \frac{P}{N})
$$

- $S$ - Ускорение (speedup)
- $P$ - доля вычислений, которые можно распараллелить
- $N$ - Количество вычислительных ядер

### Доступ к разделяемому ресурсу

- Блокировка (mutual exclusion)
- Неблокирующий доступ
	- Lock-free - гарантированный прогресс приложения
	- Wait-free - гарантированный прогресс каждого потока (каждый поток завершает выполнение любой операции за конечное число шагов)

### Класс Thread

Потоки представлены экземплярами класса `java.lang.Thread`

```java
class Thread {
	String getName()
	Long getId()
	boolean isDaemon()
	StackTraceElement[] getStackTrace()
	ThreadGroup getThreadGroup()
}
```
```java
Thread thread = new Thread() {
	@Override
	public void run() {/* ... */}
}
```

### Синхронизированный метод и блок

```java
public synchronized void doSomething() {}

public void doSomething() {
	synchronized (obj) {}
}
```

