一)Lock同步锁
1.Lock是jdk1.5之后提供的显示同步锁
优点:更加的灵活
使用Lock加锁需要使用lock上锁,unlock解锁,而且解锁的必须要执行所以一般将解锁放在的finally中
实例演示卖票
1.未加锁状态
/**
* @project_name:juc
* @date:2019/9/27:19:50
* @author:shinelon
* @Describe:测试lock同步锁
*/
public class TestLock
{
public static void main(String[] args)
{
LockDemo lockDemo = new LockDemo();
for (int i = 0;i<3;i++){
new Thread(lockDemo).start();
}
}
}
class LockDemo implements Runnable{
private int temp = 100;
@Override
public void run()
{
while (temp > 0)
{
try
{
Thread.sleep(100);
} catch (InterruptedException e)
{
}
System.out.println(Thread.currentThread().getName()+"当前出售第:"+ temp--);
}
}
}
使用lock锁进行加锁设置
/**
* @project_name:juc
* @date:2019/9/27:19:50
* @author:shinelon
* @Describe:测试lock同步锁
*/
public class TestLock
{
public static void main(String[] args)
{
LockDemo lockDemo = new LockDemo();
for (int i = 0;i<3;i++){
new Thread(lockDemo).start();
}
}
}
class LockDemo implements Runnable{
private int temp = 100;
private Lock lock = new ReentrantLock();
@Override
public void run()
{
while (true)
{
//加锁
if(temp > 0){
lock.lock();
try
{
Thread.sleep(100);
System.out.println(Thread.currentThread().getName()+"当前出售第:"+ temp--);
} catch (InterruptedException e)
{
}finally
{ //释放锁
lock.unlock();
}
}
}
}
}