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区别的主要内容,如果未能解决你的问题,请参考以下文章

线程同步

高并发学习 —— JUC

lock与synchronized的区别

Lock与Synchronized区别

Lock与Synchronized区别

synchronized与Lock的区别