`
annan211
  • 浏览: 463116 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java 读写锁demo

    博客分类:
  • jvm
 
阅读更多
java 读写锁 原理 和 实例
package thread;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ReenReadWriteLockDemo {

	public static void main(String[] args) {
		Data data = new Data();
		for(int i=0;i<3;i++){
			new Thread(new Reader(data)).start();

			new Thread(new Writer(data)).start();
		}
	}

}

class Data{
	private static final int length = 10;
	private  List<Integer> dataList = new ArrayList<Integer>(length);

	private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();

	public void get(Data data){
		lock.readLock().lock();
		try {
			if(data.dataList.size()>0){
				System.out.println(Thread.currentThread().getName()+"--获取数据----"+data.dataList.remove(0));
			}
		}finally{
			lock.readLock().unlock();
		}
	}
	public void set(Data data){
		lock.writeLock().lock();
			try {
				if(data.dataList.size()<data.length){
				int num = new Random().nextInt(10000);
				dataList.add(num);
				System.out.println(Thread.currentThread().getName()+"--写入数据-------"+num);
				}
			}finally{
				lock.writeLock().unlock();
			}
	}
}

class Reader implements Runnable{
	private Data data;
	public Reader(Data data){
		this.data = data;
	}
	@Override
	public void run() {
		while(true)
		data.get(data);
	}
}

class Writer implements Runnable {
	private Data data;
	public Writer(Data data){
		this.data = data;
	}
	@Override
	public void run() {
		while(true)
		data.set(data);
	}
}





分享到:
评论

相关推荐

    flex+java 读写数据库Demo

    "flex+java 读写数据库Demo"就是一个典型的案例,它展示了如何利用Adobe Flex作为前端UI框架,与Java后端配合,实现对数据库的读写操作。Flex是基于ActionScript的富互联网应用(RIA)开发平台,而Java则是强大的...

    java poi excel读写demo

    java poi excel操作demo 支持xls和xlsx两个格式的excel文件的读写操作。读取模式包含用户模式和事件驱动模式 ,事件驱动模式能够支持大数据量的读操作,写操作xlsx使用sxssf方式支持大数据量的写入操作。 demo 基于...

    java多线程Demo

    在多线程环境下,可能会出现数据竞争问题,为了解决这个问题,Java提供了多种同步机制,如synchronized关键字、wait/notify机制、Lock锁(ReentrantLock)等。synchronized用于控制对共享资源的访问,而wait/notify...

    Java编程读写锁详解

    读写锁的 Demo 实现可以是设计一个模拟队列,拥有一个数据成员变量用于存储数据和存取两种操作。例如: ```java public class ReadWriteLockDemo { public static void main(String[] args) { DefQueue queue = ...

    JAVA短信验证源码DEMO

    这个"JAVA短信验证源码DEMO"提供了实现短信验证功能的基本框架,主要涉及Java编程语言和网络通信技术。以下是对该DEMO中核心知识点的详细解释: 1. **TCP/IP Socket通信**:TCP(Transmission Control Protocol)/...

    java tcp程序demo

    在这个"java tcp程序demo"中,我们有两个关键组件:Server(服务器)和Client(客户端)。服务器端负责监听特定的端口,等待客户端的连接请求,一旦有客户端连接,它就能接收并处理客户端发送的数据。而客户端则负责...

    mybatis进行读写案例demo

    在本案例"mybatis进行读写案例demo"中,我们将深入探讨MyBatis如何进行数据库的读写操作,以及其核心配置和使用方法。 1. **MyBatis基本概念** MyBatis摒弃了传统的基于JDBC的数据库访问方式,它将SQL语句与Java...

    读写文件操作demo-java

    本示例"读写文件操作demo-java"旨在教你如何使用Java进行文件的读取和写入,这对于处理数据存储、日志记录或是任何需要与磁盘交互的应用程序至关重要。我们将探讨`java.io`包中的核心类,如`FileInputStream`, `...

    redis读写分离demo

    简单的redis读写分离demo 用的是依赖注入的方式,redis用的是主从复制

    数据库读写分离demo

    总之,这个"数据库读写分离demo"展示了如何在Java应用中,利用MyBatis和AOP技术来实现数据库读写分离,提高系统的读写性能和稳定性。通过这种方式,我们可以在不影响原有代码结构的前提下,优雅地解决高并发场景下的...

    java读写hdf5格式文件需要使用的库

    标题提及的“java读写hdf5格式文件需要使用的库”主要包括两个部分:Java接口库和操作系统特定的动态链接库。这里提供的jar文件`hdf5-3.3.2.jar`是Java接口库,它封装了对HDF5文件的操作,使得Java程序员可以通过...

    java socket传输demo

    在这个"java socket传输demo"中,我们将深入探讨Java如何使用Socket类来实现客户端和服务器端之间的数据交换。 首先,Socket是Java提供的一个类,位于`java.net`包下,它代表了网络上的两个应用程序之间的一个双向...

    java常用锁使用demo工程

    "java常用锁使用demo工程"是一个实践项目,旨在帮助开发者理解并熟练掌握Java中的锁机制。在这个工程中,我们可能会看到各种锁的实例,如内置锁(synchronized)、显式锁(java.util.concurrent.locks包中的Lock接口...

    Java 串口通讯demo

    这个"Java 串口通讯demo"是一个实战项目,它结合了网页界面并通过WebSocket实现与服务器的实时通信。让我们深入探讨一下这个主题。 首先,我们需要了解Java中的串口通讯。在Java中,我们可以使用`javax.comm`库来...

    完整的java操作redis demo

    在Java中,通常使用Apache POI库来读写Excel文件。POI提供了HSSF和XSSF两个API,分别用于处理老版本的 `.xls` 文件和新版本的 `.xlsx` 文件。读取Excel时,我们需要创建`Workbook`对象,然后通过`Sheet`和`Row`来...

    C#编写的深圳明华URF-R330读写器Demo M1卡读写程序代码示例

    C#非接触IC卡M1卡读写调试源代码,自己编写的明华URF-R330读写器 M1卡的读写,官方提供的demo很混乱,并且没有C#版本的,第一次测试调试都很难搞明白,我四处收集资料改写代码写出这个C#版的Demo,我这个是根据他们...

    java爬虫的DEMO的实现

    如果涉及到文件操作,可能会使用Java的`File`和`BufferedReader`类读写文件。 标签中提到了“图片文档”,这意味着这个DEMO可能还涵盖了如何下载和处理网页中的图片和文档。对于图片,Java爬虫可能会使用`java.net....

    JAVA图片上传demo.rar

    1. **文件IO操作**:Java的`java.io`包提供了读写文件的基础API,如`File`、`FileInputStream`和`FileOutputStream`等。在图片上传过程中,我们需要用到这些类来处理本地的图片文件。 2. **多部分表单数据**:在...

    ExcelDemo_Excel导出_下载_POI读excel_JXL读写excel_java读写excel_列宽_读取合并或拆分单元格内容

    总的来说,Java开发者可以通过Apache POI和JExcelAPI轻松地读写Excel文件,进行各种操作,如设置列宽、处理合并或拆分的单元格。理解并熟练掌握这些库,将极大地提升你在处理Excel数据时的效率。在实际项目中,根据...

    java四种xml读写demo

    在Java编程语言中,XML(eXtensible Markup Language)是一种重要的数据交换格式,用于存储和传输结构化数据。本文将深入探讨Java中处理XML的四种常见方法:DOM(Document Object Model)、SAX(Simple API for XML...

Global site tag (gtag.js) - Google Analytics