JUC-LOCK接口

Posted minmin123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUC-LOCK接口相关的知识,希望对你有一定的参考价值。

复习Synchronized

1、多线程编程模版上

(1)线程 操作 资源类

(2)高内聚低耦合

2、实现步骤

(1)创建资源类

(2)资源类里创建同步方法,同步代码块

3、例子:卖票

 

LOCK 接口

 

锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。

1、Lock接口的实现   ReentrantLock可重入锁

(1)如何使用?

 

class X 
   private final ReentrantLock lock = new ReentrantLock();
   // ...
?
   public void m() 
     lock.lock();  // block until condition holds
     try 
       // ... method body
      finally 
       lock.unlock()
     
   
 

 

 

2、创建线程方式 

(1)继承Thread

public   class  SaleTicket  extends  Thread

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

 

(2)new Thread()

Thread  t1  =  new  Thread(); 
t1 .start(); 

 

(3)Thread(Runnable target, String name) 「最好使用第三种」

3、实现Runnable方法

(1)新建类实现runnable接口

class   MyThread   implements   Runnable //新建类实现runnable接口 ?  
new  Thread( new   MyThread ,...) 
?
这种方法会新增类,有更新更好的方法 

 

(2)匿名内部类

new  Thread( new  Runnable()  
     @Override 
     public   void  run()  
  
     
   ,  "your thread name" ).start(); 
 
 这种方法不需要创建新的类,可以new接口   

 

(3)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(); 
   */ 
  
 
  
//1 class MyThread implements Runnable 
  
//2 匿名内部类 
  
//3 laExpress 
  

 

以上是关于JUC-LOCK接口的主要内容,如果未能解决你的问题,请参考以下文章

HDMI接口,S端子,AV接口,VGA接口,分量视频接口,USB接口,PC接口,各自的用途 ?

什么是接口测试中的接口?

vga接口和hdmi接口的区别是啥

多测师拱墅校区肖sir_高级金牌讲师_接口测试之接口文档和接口用例

接口——嵌套,接口和类型间的转换,空接口类型,类型分支

什么是接口以及接口测试