Java线程同步_1

时间:2023-03-08 15:58:51

Java线程同步_1

synchronized

该同步机制的的核心是同步监视器,任何对象都可以作为同步监视器,代码执行结束,或者程序调用了同步监视器的wait方法会导致释放同步监视器

  • synchronized代码块

synchronized(obj){
//
}

任何线程执行到该代码的时候,会先同步监视器obj,然后对方法区加锁,执行代码块,执行完毕再解锁。在加锁期间,其他线程执行到这里个代码块时会需要先获取锁对象,如果锁对象已经被另外的线程获取,则获取失败,线程阻塞。等待占用代码块的线程解锁后。获取锁对象,然后继续执行。

静态成员是属于类的。非静态成员属于对象。

  • synchronized方法

同步监视器是this


public synchronized void draw(){
//
}

任何线程执行该方法的时候同样会获取锁对象,然后加锁。后续则同synchronized代码块是一样的。

同步锁

使用lock对象作为同步锁对象

一般使用 ReenTranlock 对象,可重复加锁,必须显示加锁,显示解锁


private final ReenTranlock lock = new ReenTranlock();
lock.lock();
try{
//
}finally{
lock.unlock();
}

其他同步API