Lock与Synchronized区别
Posted weixin_ancenhw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lock与Synchronized区别相关的知识,希望对你有一定的参考价值。
创建线程的几种方式:
1、继承Thread类
2、实现Runnable接口
3、使用Callable接口
4、使用线程池
Lock与Synchronized区别:
1、Lock不是java语言内置的,Synchronized是java语言的关键字;
2、Lock是一个接口类,通过这个类实现同步访问;
3、Synchronized会自动让线程释放对锁的占用;而Lock需要手动释放锁,不然会出现死锁现象。
Lock例子:
//定义票数
private int tickCount=30;
//定义可重复锁
private ReentrantLock lock=new ReentrantLock();
//售票员
public synchronized void ticker()
lock.lock();
try
if (tickCount>0)
System.out.println("当前售票的线程"+Thread.currentThread().getName()+",剩余票数:"+tickCount--);
catch (Exception e)
e.printStackTrace();
finally
lock.unlock();
@Test
public void contextLoads()
RenrenApplicationTests tickers = new RenrenApplicationTests();
//定义售票员个数
for (int i = 0; i < 6; i++)
new Thread(()->
for (int j = 0; j < 60; j++)
tickers.ticker();
).start();
Synchronized例子:
//定义票数
private int tickCount=30;
//售票员
public synchronized void ticker()
if (tickCount>0)
System.out.println("当前售票的线程"+Thread.currentThread().getName()+",剩余票数:"+tickCount--);
@Test
public void contextLoads()
RenrenApplicationTests tickers = new RenrenApplicationTests();
//定义售票员个数
for (int i = 0; i < 6; i++)
new Thread(new Runnable()
@Override
public void run()
//抢票的人数
for (int j = 0; j < 60; j++)
tickers.ticker();
).start();
以上是关于Lock与Synchronized区别的主要内容,如果未能解决你的问题,请参考以下文章