Java线程学习经典例子-读写者演示

简介: Java线程学习经典例子-读写者演示

Java线程学习经典例子-读写者演示


Java线程学习最经典的例子-读写者,主要用到Thread相关知识如下:


-         线程的start与run


-         线程的休眠(sleep)


-         数据对象加锁(synchronized)


-         数据对象的等待与释放(wait and notify)


程序实现:


-ObjectData数据类对象,通过synchronized关键字实现加锁,在线程读写者中使用。


-ConsumerThread消费者线程,读取数据对象中count值之后,通知生产者线程


-ProductThread生产者线程,对数据对象中count值操作,每次加1,然后通知消费者线程


类结构图如下:

代码实现

消费者-读线程

package com.gloomyfish.jse.thirdteen;
 
public class ConsumerThread extends Thread {
  private ObjectData data;
  public ConsumerThread(ObjectData data) {
    this.data = data;
  }
 
  @Override
  public void run() {
    while(true) {
      try {
        synchronized (data) {
          data.wait();
          data.read();
          data.notify();
        }
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
 
}

写线程-生产者线程

package com.gloomyfish.jse.thirdteen;
 
public class ProductThread extends Thread {
  private ObjectData data;
 
  public ProductThread(ObjectData data) {
    this.data = data;
  }
 
  @Override
  public void run() {
    while (true) {
      try {
        synchronized (data) {
          data.write();
          Thread.sleep(3000);
          data.notify();
          data.wait();
        }
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
 
}1.

数据对象类

package com.gloomyfish.jse.thirdteen;
 
public class ObjectData {
 
  private int count;
  
  public ObjectData() {
    count = 0;
  }
  
  public void read() {
    System.out.println("read count : " + count);
    System.out.println();
  }
  
  public void write() {
    count++;
    System.out.println("write count : " + count);
  }
}

测试代码:

  public static void main(String[] args) {
    ObjectData data = new ObjectData();
    ConsumerThread ct = new ConsumerThread(data);
    ProductThread pt = new ProductThread(data);
 
    ct.start();
    pt.start();
}

总结:

示例程序代码完成了线程之间如何通过wait与notify实现数据的读写

同步控制。演示了Java的同步关键字synchronized的用法与线程的用法。

相关文章
|
3天前
|
并行计算 Java API
Java 基础篇完整学习攻略
本教程涵盖Java基础到高级内容,包括模块化系统、Stream API、多线程编程、JVM机制、集合框架及新特性如Records和模式匹配等,适合零基础学员系统学习Java编程。
18 0
|
7天前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
45 0
|
5天前
|
Java API 调度
从阻塞到畅通:Java虚拟线程开启并发新纪元
从阻塞到畅通:Java虚拟线程开启并发新纪元
140 83
|
11天前
|
存储 Java 调度
Java虚拟线程:轻量级并发的革命性突破
Java虚拟线程:轻量级并发的革命性突破
153 83
|
3天前
|
存储 算法 安全
JAVA 八股文全网最详尽整理包含各类核心考点助你高效学习 jAVA 八股文赶紧收藏
本文整理了Java核心技术内容,涵盖Java基础、多线程、JVM、集合框架等八股文知识点,包含面向对象特性、线程创建与通信、运行时数据区、垃圾回收算法及常用集合类对比,附有代码示例与学习资料下载链接,适合Java开发者系统学习与面试准备。
128 0
|
25天前
|
Oracle Java 关系型数据库
java 入门学习视频_2025 最新 java 入门零基础学习视频教程
《Java 21 入门实操指南(2025年版)》提供了Java最新特性的开发指导。首先介绍了JDK 21和IntelliJ IDEA 2025.1的环境配置,包括环境变量设置和预览功能启用。重点讲解了Java 21三大核心特性:虚拟线程简化高并发编程,Record模式优化数据解构,字符串模板提升字符串拼接可读性。最后通过图书管理系统案例,展示如何运用Record定义实体类、使用Stream API进行数据操作,以及结合字符串模板实现控制台交互。该指南完整呈现了从环境搭建到实际项目开发的Java 21全流程实
54 1
|
27天前
|
Java
银行转账p图软件,对公转账截图生成器,java版开发银行模拟器【仅供学习参考】
这是一套简单的银行账户管理系统代码,包含`BankAccount`和`BankSystem`两个核心类。`BankAccount`负责单个账户的管理
|
27天前
|
存储 Java 数据库
银行流水生成器在线制作,银行转账p图在线生成,java实现最牛的生成器【仅供学习用途】
本示例展示了一个基于Java的银行交易记录管理系统基础架构,涵盖交易记录生成、数字签名加密及账本存储功能。核心内容包括:1) TransactionRecord类
|
20天前
|
前端开发 Java 数据库
2025 年 Java 学习完整步骤及详细路线指南
本教程涵盖Java从基础到高级的完整学习路径,包括环境配置、语法基础、面向对象编程、集合框架、多线程、网络编程、数据库操作、Spring Boot、微服务架构及项目实战。通过系统学习与实操,助你全面掌握Java核心技术与企业级应用开发。
92 0

热门文章

最新文章