一、线程同步机制
多个线程操作同一个资源。
并发:同一个对象被多个线程同时操作
处理线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这时候就需要线程同步。线程同步就是一种等待机制。
队列和锁:解决线程安全性
锁机制:synchronized,默认锁的是this,加锁时要注意锁的对象
会引起以下问题:
- 一个线程持有锁会导致其他所有需要此锁的线程挂起
- 在多线程竞争下,加锁释放锁会导致比较多的上下文切换和调度延时,引起性能问题;
- 如果一个优先级高的线程等待一个优先级低的线程释放锁,会导致优先级倒置,引起性能问题 。
线程不安全的案列:
public class UnsafeBuyTicket {
public static void main(String[] args) {
BuyTicket station = new BuyTicket();
new Thread(station, "A").start();
new Thread(station, "B").start();
new Thread(station, "C").start();
}
}
class BuyTicket implements Runnable{
private int ticketNums = 10;
boolean flag = true;
@Override
public void run() {