java多线程Lock锁,Synchronized锁

1.传统:synchronized
代码:

package com.qiu;
//基本的买票票的例子
/*
  public static void main(String[] args) {
        new Thread(new MyThread()).start();

​    }
​    static class MyThread implements Runnable{

​        @Override
​        public void run() {

​        }
​    }
 */
/**

 * 真正的多线程开发,公司中的开发,降低偶和行
 * 线程就是一个单独的资源类,没有任何的附属操作!
 * 1.属性,方法
   *
    */
   public class SaleTicketDemmo01 {
   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();
   }
   //资源类 OOP
   static class Ticket{
       //属性,方法
       private int number =50;
       //买票的方式
       public void sale(){
           if (number>0){
               System.out.println(Thread.currentThread().getName()+"卖出了第"+(number--)+"张"+"剩余了"+number+"张");
           }
       }
   }
   }
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200427203531453.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNDAwNzYz,size_16,color_FFFFFF,t_70)出现了多个线程争抢了同一个资源
解决方式    **public synchronized void sale(){**
  1. Lock锁
    在这里插入图片描述
    在这里插入图片描述
    三个实现类:
    在这里插入图片描述在这里插入图片描述公平锁:十分公平:可以先来后到

假设一个执行时间需要三分钟,一个执行时间需要三小时,如果说三小时在前面,3分钟再后面,则公平锁只会先执行3小时的起,再来执行3分钟的,这样就很不合适,所以说默认的就是不公平的.

非公平锁:十分不公平,可以插队(默认是非公平锁)
在这里插入图片描述synchronized和Lock区别

1.synchronized是内置的关键字,Lock是一个java类

2.synchronized无法判断获取锁的状态,Lock可以判断是否获取到了锁

3.synchronized会自动释放锁, Lock必须要手动释放锁,如果不释放锁就会产生死锁

4.synchronized线程1(获得锁,阻塞),线程2会(等待,傻傻的等),Lock就不一定会等待下去.

在这里插入图片描述
5.synchronized 可重入锁,不可以中断的,非公平的.Lock,是可重入锁,可以判断锁,非公平(可以自己设置)

6.synchronized适合锁少量的代码同步问题,Lock适合锁大量的同步代码

原创文章 32 获赞 52 访问量 646

猜你喜欢

转载自blog.csdn.net/qq_42400763/article/details/105798946