Synchronized 与 Lock 的使用
创始人
2024-01-25 12:07:51
0

Synchronized的使用

        以卖票为例

//基本的卖票例子/*真正的多线程开发,公司中的开发,降低耦合性线程就是一个单独的资源类,没有任何附属的操作1.属性、方法*/
public class SaleTicketDemo01 {public static void main(String[] args) {//多个线程操作同一个资源类Ticket ticket = new Ticket();//@FunctionalInterface 函数式接口,jdk1.8 lambda表达式 (参数)->{ 代码 }new Thread(()->{for (int i = 0; i < 60; i++) {ticket.sale();}},"A").start();new Thread(()->{for (int i = 0; i < 60; i++) {ticket.sale();}},"B").start();new Thread(()->{for (int i = 0; i < 60; i++) {ticket.sale();}},"C").start();}}class Ticket {//属性、方法private int number = 50;//卖票的方式//synchronized 本质:队列,锁public synchronized void sale(){if (number>0){System.out.println(Thread.currentThread().getName()+"卖出了1张票,剩余"+--number+"张票");}}}

Lock锁

        需要手动加锁,释放锁

  Lock锁是一个接口,他有三个实现类:

  • ReentrantLock类
  • ReentrantReadWriteLock.ReadLock
  • ReentrantReadWriteLock.WriteLock

        以卖票为例

//基本的卖票例子import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;/*真正的多线程开发,公司中的开发,降低耦合性线程就是一个单独的资源类,没有任何附属的操作1.属性、方法*/
public class SaleTicketDemo02 {public static void main(String[] args) {//多个线程操作同一个资源类Ticket2 ticket = new Ticket2();//@FunctionalInterface 函数式接口,jdk1.8 lambda表达式 (参数)->{ 代码 }new Thread(()->{for (int i = 0; i < 5; i++) {ticket.sale();}},"A").start();new Thread(()->{for (int i = 0; i < 5; i++) {ticket.sale();}},"B").start();new Thread(()->{for (int i = 0; i < 5; i++) {ticket.sale();}},"C").start();}}class Ticket2 {//属性、方法private int number = 15;Lock lock = new ReentrantLock();//lock三部曲//1. new ReentrantLock()//2.lock.lock(); //加锁//3.finally =>lock.unlock(); //解锁public synchronized void sale(){lock.lock(); //加锁try {//业务代码if (number>0){System.out.println(Thread.currentThread().getName()+"卖出了1张票,剩余"+--number+"张票");}} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();  //解锁}}}

Lock锁和synchronized的区别

  1. Synchronized是内置Java关键字;Lock是一个Java类。
  2. Synchronized无法判断获取锁的状态;Lock可以判断是否获取到了锁。(boolean b = lock.tryLock();)
  3. Synchronized会自动释放锁;Lock必须要手动释放锁,如果不释放锁,死锁。
  4. Synchronized线程1获得锁阻塞时,线程2会一直等待下去;Lock锁线程1获得锁阻塞时,线程2等待足够长的时间后中断等待,去做其他的事。
  5. Synchronized可重入锁,不可以中断的,非公平;Lock,可重入锁,可以判断锁,非公平(可手动设置为公平锁)。
  6. Synchronized适合锁少量的代码同步问题;Lock适合锁大量的同步代码。

相关内容

热门资讯

在合肥创业推荐项目 在合肥创业...   :个性服装印制店现在转印和电脑技术加在一起已经将应用领域无限扩展了,可以应用于空白文化衫、牛仔、...
2018年 2018年年度报告... 2粗粮早餐现代人越来越注意饮食健康,小本生意你可以从粗粮早餐下手。像玉米棒、烤红薯、煎饼、烧麦包子、...
最适小本生意创业的项目合年轻人... 个性化小礼品这种风靡欧美的个人图片保存新模式,已经从欧美展开,于去年9月份,个性化小礼品悄然进军中国...
2018适合在农乡镇小本创业致... 农村乡镇创业项目:科技书店现在的农村大都搞多种经营,农民们也广寻致富门路。通俗易懂的农村科技致富书籍...
乡镇小本创业致富项目 乡镇小本... 做什么小生意比较好赚钱?如今市面上的小本创业项目如雨后春笋般快速发展,如果你真的想要做点小生意赚钱。...
2017年农村致富金点子 20... 县城虽小却是一个地区的经济中心,周边生活的老百姓都要通过县城满足自己的日常生活需求。2017年被称为...
农村六个创业项目 最适合农村的... 洗一套衣服只需2元左右的成本,收费10元,翻新、清洗一件皮衣成本1-2元,收50-80元,日收活在5...
亳州炒货机小本创业首选项目 亳... 炒货机亳州炒货机,宿州炒货机小本创业首选项目致诚机械板栗机厂专业生产、批发、供应、销售各款炒板栗机器...
市场空亳州炒货机小本创业首选项... 创业俨然成为了当今社会致富的主要途径,而创业的风险又是让很多投资者忌惮。为了降低风险又不至于错过这个...
成都女人做什么创业项目比较好推... 成都女人做什么创业项目比较好推荐对于一个普通创业者来说,在选择项目的时候,一定要考虑自己的兴趣所在。...