JUC之Lock接口_java培训

发布时间:2020年08月10日作者:atguigu浏览次数:364

Lock

  • 是什么

参考Java8API

java培训教程Lock接口

Lock implementations provide more extensive locking operations than can be obtained using synchronized methods and statements. They allow more flexible structuring, may have quite different properties, and may support multiple associated Condition objects.

Lock实现提供更广泛的锁定操作可以比使用 synchronized获得方法和声明更好。他们允许更灵活的结构,可以有完全不同的特性,可以支持多个相关的 Condition对象。

java培训教程Lock接口

  • Lock接口的实现

ReentrantLock可重入锁,参考Java8API

java培训教程Lock接口
  • 创建线程方式
  • 继承Thread

例如:

public class SaleTicket extends Thread

        Java是单继承,资源宝贵,要用接口方式

  • new Thread()

例如:

Thread t1 = new Thread();

t1.start();

不能这样实现

  • Thread(Runnable target, String name)
    参考Java8API
java培训教程Lock接口
java培训教程Lock接口
  • 实现线程方法
  • 新建类实现runnable接口

class MyThread implements Runnable//新建类实现runnable接口

new Thread(new MyThread,…)

        这种方法会新增类,有更新更好的方法

  • 匿名内部类

new Thread(new Runnable() {

    @Override

    public void run() {

    }

   }, “your thread name”).start();

这种方法不需要创建新的类,可以new接口

  •  lambda表达式

  new Thread(() -> {

 }, “your thread name”).start();

这种方法代码更简洁精炼

  • 程序代码

package com.atguigu.thread;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

class Ticket //实例例eld +method

{

 private int number=30;

/* //1同步 public synchronized void sale()

 {//2同步  synchronized(this) {}

  if(number > 0) {

    System.out.println(Thread.currentThread().getName()+”卖出”+(number–)+”\t 还剩number);

   }

 }*/

// Lock implementations provide more extensive locking operations

// than can be obtained using synchronized methods and statements.

 private Lock lock = new ReentrantLock();//List list = new ArrayList()

 public void sale()

 {

   lock.lock();

   try {

    if(number > 0) {

     System.out.println(Thread.currentThread().getName()+”卖出”+(number–)+”\t 还剩number);

    }

   } catch (Exception e) {

    e.printStackTrace();

   } finally {

    lock.unlock();

   }

 }

}

/**

 *

 * @Description:卖票程序个售票出  0张票

 @author xiale

 * 笔记:J里面如何 1 多线程编-上

    1.1 线程  (资里源类 *   1.2 高内聚 /

public class SaleTicket

{

 public static void main(String[] args)//main所有程序

   Ticket ticket = new Ticket();

   //Thread(Runnable target, String name) Allocates a new Thread object.

 new Thread(() -> {for (int i = 1; i < 40; i++)ticket.sale();}, “AA”).start();

 new Thread(() -> {for (int i = 1; i < 40; i++)ticket.sale();}, “BB”).start();

 new Thread(() -> {for (int i = 1; i < 40; i++)ticket.sale();}, “CC”).start();

/*  new Thread(new Runnable() {

    @Override

    public void run()

    {

     for (int i = 1; i <=40; i++)

     {

       ticket.sale();

     }

    }

   }, “AA”).start();

   new Thread(new Runnable() {

    @Override

    public void run()

    {

     for (int i = 1; i <=40; i++)

     {

       ticket.sale();

     }

    }

   }, “BB”).start();

   new Thread(new Runnable() {

    @Override

    public void run()

    {

     for (int i = 1; i <=40; i++)

     {

       ticket.sale();

     }

    }

   }, “CC”).start();

   */

 }

}


上一篇:
下一篇:
相关课程

java培训 大数据培训 前端培训 UI/UE设计培训

关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)