66.Java-资源抢夺案例(使用Lock)

  • 调用类
package com.test.thread_Lock;

public class MainClass {
    
    public static void main(String[] args) {
        
        Resource resource = new Resource();
        
        new Thread(new Businesser(resource)).start();
        new Thread(new Visitor(resource)).start();
    }   
    
}
  • 资源类
package com.test.thread_Lock;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Resource {
    
    private String name;
    private String sex;
    
    private boolean isEmpty = true;
    private final Lock lock = new ReentrantLock();
    private Condition con = lock.newCondition();
    
    public void setterData(String name,String sex) {
        
        lock.lock();
        try {
            
            while(!isEmpty) {
                con.await();
            }
            
            this.name = name;
            this.sex = sex;
            
            isEmpty = false;
            con.signalAll();
            
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            
            lock.unlock();
            
        }
        
    }
    
    public void getterData() {
        lock.lock();
        
        try {
            while(isEmpty) {
                con.await();
            }
            
            System.out.println(this.name+":"+this.sex);
            
            isEmpty = true;
            con.signalAll();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            
            
            lock.unlock();
        }
        

    }
}

  • 商家
package com.test.thread_Lock;

public class Businesser implements Runnable{
    private Resource resource = null;
    
    public Businesser(Resource resource) {
        this.resource = resource;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        
        for (int i = 0; i < 50; i++) {
            
            this.resource.setterData("尼古拉斯"+i+"世", "男");
            
        }
    }
}

  • 客人
package com.test.thread_Lock;

import java.lang.Runnable;
public class Visitor implements Runnable{
    private Resource resource = null;
    
    public Visitor(Resource resource) {
        this.resource = resource;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        
        for (int i = 0; i < 50; i++) {
            
            this.resource.getterData();;
            
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,225评论 18 399
  • 刚刚过去的周日,是小蜗牛特训营二队的木工课。刚好我在燕郊,有空来客串。孩子们制作完成的时候,是按照惯例的总结时间。...
    花胜雪阅读 3,552评论 0 2
  • 洗心集录纲要 1.定位:可通过出版审核,面向市场销售,并且带来持久影响力。每位参与人员均能在汇...
    无相逍遥阅读 3,411评论 0 1
  • 黑先手筋题2D 一定要坐好,静静的坐着,不要摆棋,看15步棋,并且查出黑棋和白棋的气是多少,再摆出来!!!! 答案:
    james_0a53阅读 1,397评论 0 1