【JAVA-线程】线程的同步Lock
1实例化ReentrantLock
private ReentrantLock lock =new ReentrantLock();
2.把需要 控制的代码块 放到try-finally中
在try里的第一句代码 为lock.lock();
在finally里的代码为 lock.unlock()
try {
lock.lock();
} finally {
lock.unlock();
}
代码:
import java.util.concurrent.locks.ReentrantLock;
class Window implements Runnable{
private ReentrantLock lock = new ReentrantLock();
private int n =100;
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
try {
//2调用lock方法
lock.lock();
if(n>0) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"..."+
n);
n--;
}else {
break;
}
} finally {
//3调用 unlock()
lock.unlock();
}
}
}
}
public class LockDemo {
public static void main(String[] args) {
Window w =new Window();
new Thread(w,"t1").start();
new Thread(w,"t2").start();
new Thread(w,"t3").start();
}
}
Synchronized 和 Lock 对比