zoukankan      html  css  js  c++  java
  • 线程同步 综合实战

    class Info {
    private String title;
    private String content;
    private boolean flag = true;

    // flag=true:表示可以生产,但是还不能被取走
    // flag=false:表示可以被取走,但是还不可以生产
    public synchronized void set(String title, String content) {
    // 重复进入到了set()方法里面,发现不能够生产,所以要等待
    if (flag == false) {// 还没被取走,等待
    try {
    super.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    this.title = title;
    // try {
    // Thread.sleep(500);
    // } catch (InterruptedException e) {
    // e.printStackTrace();
    // }
    this.content = content;
    this.flag = false;// 已生产,修改标记为要取走
    super.notify();// 唤醒其它等待线程
    }

    public synchronized void get() {
    if (flag == true) {// 还没生产,等待
    try {
    super.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    // try {
    // Thread.sleep(500);
    // } catch (InterruptedException e) {
    // e.printStackTrace();
    // }
    System.out.println(this.title + " " + this.content);
    this.flag = true;// 已取走,修改为要生产
    super.notify();
    }

    }

    class Productor implements Runnable {
    private Info info;

    public Productor(Info info) {
    this.info = info;
    }

    @Override
    public void run() {
    for (int x = 0; x < 150; x++) {
    if (x % 2 == 0) {
    this.info.set("王晶磊", "好学生一枚");
    } else {
    this.info.set("可爱的萌动物", "草泥马");
    }
    }
    }
    }

    class Customer implements Runnable {
    private Info info;

    public Customer(Info info) {
    this.info = info;
    }

    @Override
    public void run() {
    for (int x = 0; x < 150; x++) {
    this.info.get();
    }
    }

    }

    public class SynchronizedDemo {
    public static void main(String[] args) {
    Info info = new Info();
    new Thread(new Productor(info)).start();
    new Thread(new Customer(info)).start();
    }
    }

  • 相关阅读:
    Spring Boot 配置文件和命令行配置
    Spring Boot RestApi 测试教程 Mock 的使用
    Spring Boot 集成 Swagger2 教程
    Spring Boot Web 开发@Controller @RestController 使用教程
    SpringBoot RESTful API 架构风格实践
    Spring Boot 使用 Aop 实现日志全局拦截
    Spring Boot 全局异常处理
    Spring Boot Thymeleaf 模板引擎的使用
    Spring Boot Log 日志使用教程
    IDEA 下的 github 创建提交与修改
  • 原文地址:https://www.cnblogs.com/Lovemeifyoudare/p/10406758.html
Copyright © 2011-2022 走看看