- 浏览: 68995 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
hhhk:
总结的很好
java从控制台读入数据 -
hnzhoujunmei:
不错
java从控制台读入数据 -
EdwardWorld:
已受用,谢谢分享。
java判断一个数是否为质数的方法 -
yangdong:
不错,console我还是第一次听说。有点像 .net 了
java从控制台读入数据
package com.game.distributed.locak;
public interface ReadWriteLock {
public boolean readLock();
public void readUnLock();
public boolean writeLock();
public void writeUnLock();
}
package com.game.distributed.locak;
import java.util.concurrent.atomic.AtomicInteger;
public class CurrentReadWriteLock implements ReadWriteLock {
private boolean isRead;
private boolean isWrite;
private AtomicInteger readLocks = new AtomicInteger();
@Override
public synchronized boolean readLock() {
try {
while (isWrite) {
wait();
}
System.out.println(Thread.currentThread().getName() + "获得读锁成功");
readLocks.incrementAndGet();
isRead = true;
} catch (InterruptedException e) {
e.printStackTrace();
}
return true;
}
@Override
public synchronized void readUnLock() {
System.out.println(Thread.currentThread().getName() + "释放读锁成功");
if(readLocks.decrementAndGet() <= 0) {
isRead = false;
}
notifyAll();
}
@Override
public synchronized boolean writeLock() {
try {
while (isRead || isWrite) {
wait();
}
System.out.println(Thread.currentThread().getName() + "获得写锁成功");
isWrite = true;
} catch (InterruptedException e) {
e.printStackTrace();
}
return true;
}
@Override
public synchronized void writeUnLock() {
System.out.println(Thread.currentThread().getName() + "释放写锁成功");
isWrite = false;
notifyAll();
}
}
package com.ant;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.game.distributed.locak.CurrentReadWriteLock;
import com.game.distributed.locak.ReadWriteLock;
public class AntTest {
public static int[] numbers = { 5, 2, 1, 5, 12, 545, 121, 56, 787, 34, 121,
1222, 545, 546, 576, 172 };
public static void main(String[] args) {
List<Integer> data = new ArrayList<Integer>();
ReadWriteLock lock = new CurrentReadWriteLock();
Thread writer1 = new Thread(new Writer(data, lock,5000),"writer1");
Thread writer2 = new Thread(new Writer(data, lock,6000),"writer2");
Thread writer3 = new Thread(new Writer(data, lock,3000),"writer3");
Thread writer4 = new Thread(new Writer(data, lock,8000),"writer4");
Thread writer5 = new Thread(new Writer(data, lock,4000),"writer5");
Thread writer6 = new Thread(new Writer(data, lock,1000),"writer6");
Thread reader1 = new Thread(new Reader(data, lock,1000),"reader1");
Thread reader2 = new Thread(new Reader(data, lock,6000),"reader2");
Thread reader3 = new Thread(new Reader(data, lock,2000),"reader3");
Thread reader4 = new Thread(new Reader(data, lock,1000),"reader4");
Thread reader5 = new Thread(new Reader(data, lock,7000),"reader5");
Thread reader6 = new Thread(new Reader(data, lock,2000),"reader6");
writer1.start();
writer2.start();
writer3.start();
writer4.start();
writer5.start();
writer6.start();
reader1.start();
reader2.start();
reader3.start();
reader4.start();
reader5.start();
reader6.start();
}
}
class Writer implements Runnable {
ReadWriteLock lock;
List<Integer> data;
long millis;
public Writer(List<Integer> data, ReadWriteLock lock,long millis) {
this.data = data;
this.lock = lock;
this.millis = millis;
}
@Override
public void run() {
while (true) {
lock.writeLock();
System.out.println(Thread.currentThread().getName() + "开始添加数据");
Random random = new Random();
int number = random.nextInt(AntTest.numbers.length);
for (int i = 0; i < number; i++) {
data.add(AntTest.numbers[i]);
System.out.print(AntTest.numbers[i] + " ");
}
System.out.println(Thread.currentThread().getName() + "添加的数据结束 "
+ data);
lock.writeUnLock();
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Reader implements Runnable {
ReadWriteLock lock;
List<Integer> data;
long millis;
public Reader(List<Integer> data, ReadWriteLock lock,long millis) {
this.data = data;
this.lock = lock;
this.millis = millis;
}
@Override
public void run() {
while (true) {
lock.readLock();
System.out.println(Thread.currentThread().getName()+ "开始读取数据数据 " + data);
lock.readUnLock();
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
发表评论
-
详解大端模式和小端模式
2012-06-27 15:56 990详解大端模式和小端 ... -
java内存分析工具(转2)
2012-02-28 15:00 1300前言的前言:本文是自2005年8月以来,首次在一个月之内 ... -
java内存分析工具(转)
2012-02-28 14:51 1315最近在测一个接口时 ... -
Zookeeper初览
2012-01-31 22:42 995最经在做项目时需要用到分布式锁服务,我在apach ... -
递归求解表达式
2011-05-31 23:56 1181import java.util.Stack; public ... -
一道算法
2010-08-16 15:44 87当我有400个对象时,我还需要这400个对象的拷贝,但java ... -
中文的unicode编码的范围
2010-02-11 15:38 1861\u4E00-\u9FFF -
一个java算法的效率问题
2010-01-01 13:22 85我现在有一个3*3的格子,用list实现2维数组,没一个格子放 ... -
每个初学者都应该搞懂的几个问题?
2009-09-30 21:51 547对于这个系列里的问题 ... -
三元运算符的特性
2009-09-30 20:45 871今天工作的时候,想到的一个问题 今天工作的时候,帮同事 ... -
全面理解J2SE初始化顺序
2009-09-26 14:01 632class A{ public String co ... -
Java中堆和栈的区别
2009-07-28 22:25 651栈与堆都是Java用来在Ram ... -
理解i++和++i的机制
2009-07-28 17:32 816int i=0; j=i++; int i=0; j=++i ... -
开窗户小游戏
2009-05-07 23:18 1241package GUI; import java.awt.Bo ... -
简单日历
2009-05-06 14:09 988package GUI; import java.awt.Bo ... -
java从控制台读入数据
2009-04-22 23:10 54430 引言 从控制台中读取数据是一个比较常用的功能,在 JDK ... -
java判断一个数是否为质数的方法
2009-04-21 21:49 139621:因为质数是除去能除1和本身以外的没有因式的数,所以 ...
相关推荐
在Windows操作系统中,读写锁(Read-Write Lock)是一种多线程同步原语,它允许多个线程同时读取共享资源,但在写入时仅允许一个线程访问。这提高了并发性能,尤其是在读操作远多于写操作的场景下。本篇文章将深入...
在多线程编程中,读写锁是一种非常重要的同步机制,它允许多个读线程同时访问共享资源,但只允许一个写线程独占资源,从而提高了并发性能。本话题将详细探讨在Windows和Linux环境下,如何使用C++来实现读写锁。 ...
本文将深入探讨易语言中的原子锁与读写锁。 原子操作是一种不可分割的操作,它在执行过程中不会被其他线程中断。在易语言中,原子操作常用于更新计数器、标志位等简单数据类型的场景,避免了线程间的竞态条件。例如...
其中,读写锁(Read-Write Lock,简称RWLock)是一种高效的线程同步机制,适用于大量读取操作和少量写入操作的情况。在本文中,我们将深入探讨基于关键区的Windows读写锁类及其自动锁的实现原理和改进点。 读写锁的...
Java 读写锁是Java并发编程中的一种重要机制,它为多线程环境下的数据访问提供了更为精细的控制。在Java的`java.util.concurrent.locks`包中,`ReentrantReadWriteLock`类实现了读写锁的功能。这个锁允许多个读取者...
为了解决这个问题,我们可以利用C#中的读写锁(ReaderWriterLockSlim)来实现线程同步。本文通过三行代码展示了如何使用读写锁解决多线程并发写入文件的冲突。 读写锁的核心在于,它允许多个线程同时读取资源,但只...
linux写优先的读写锁设计 在 Linux 操作系统中,有两种基本机制来实现数据互斥,即信号量(semaphore)和自旋锁(spinlock)。本文将讨论一种特殊的自旋锁变种,即读写锁(read-write lock),它允许多个进程同时...
在Linux系统中,读写锁(Read/Write Locks,简称rwlocks)是一种多线程同步机制,它允许多个线程同时进行读操作,但只允许一个线程执行写操作。这种锁的设计目的是提高并发性能,特别是当读操作远多于写操作时。在...
本文实例讲述了C#解决SQlite并发异常问题的方法。分享给大家供大家参考,...作者利用读写锁(ReaderWriterLock),达到了多线程安全访问的目标。 using System; using System.Collections.Generic; using System.Text;
### 同步机制中的读写锁 (Read-Write Lock) #### 概述 在多线程编程中,读写锁是一种特殊的同步机制,用于解决读者写者问题。它允许多个线程同时读取共享资源,但只允许一个线程写入资源。这种机制通过将读操作和...
在这个例子中,我们讨论了如何使用读写锁(Read-Write Lock)来实现多线程环境中的并发访问控制。读写锁是一种高级的同步机制,它允许多个线程同时读取共享资源,但只允许一个线程进行写操作。这在数据读取远比写入...
操作系统中的读写锁是一种多线程同步机制,用于在并发环境中高效地管理共享资源的访问。在计算机系统中,特别是当多个线程需要同时访问同一数据时,读写锁能够提供一种策略,允许多个线程同时读取资源,但只允许一个...
本文将深入探讨基于Zookeeper实现的分布式读写锁,并利用Zkclient客户端进行操作。Zookeeper是一个分布式服务协调框架,它提供了一种简单且高效的方式来实现分布式锁。 **一、Zookeeper简介** Zookeeper是由Apache...
易语言读写锁1.2模块源码例程程序调用API函数实现读写锁功能的操作。点评:读写锁实际是一种特殊的锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则对共享资源进行写操作。这种锁相...
读写锁是多线程编程中的一个重要概念,用于提高并发访问数据时的效率。在并发环境中,如果多个线程同时读取数据,通常不会产生冲突,而写入数据时则可能引发问题。读写锁正是为了解决这个问题,它允许多个读取线程...
在C++编程中,读写锁(Read-Write Lock)是一种多线程同步机制,它允许多个线程同时读取共享资源,但只允许一个线程写入。这种锁机制提高了对共享数据的并发访问效率,是并发编程中常用的一种工具。本实例将通过代码...
读写锁是多线程编程中的一个重要概念,它在C#中被广泛应用于提高并发访问数据的效率。本文将深入探讨C#中的读写锁及其使用,帮助你理解和掌握这一关键技能。 首先,读写锁提供了对共享资源的细粒度控制。在C#中,`...
### MySQL读写锁知识点详解 #### 一、读写锁概念与特征 在数据库系统中,锁机制是一种非常重要的并发控制手段,它主要用于确保多用户同时访问数据时的一致性和完整性。MySQL作为一款广泛使用的开源关系型数据库...
在IT领域,线程池和读写锁是两种重要的多线程编程技术,尤其是在Linux操作系统中。本项目提供了一个标准C语言实现的线程池,同时整合了读写锁的实现,这对于提升程序的并发性能和资源管理具有重要意义。 线程池是一...
inux 读写锁应用实例 /*使用读写锁实现四个线程读写一段程序的实例,共创建了四个新的线程,其中两个线程用来读取数据,另外两个线程用来写入数据。在任意时刻,如果有一个线程在写数据,将阻塞所有其他线程的任何...