• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

读写锁(共享锁(读锁),独享锁(写锁))


Recommended Posts

读读可以共存

读写不可以共存

写写不可以共存

包com。洛金。读写;

导入Java。util。hashmap

导入Java。util。地图;

导入Java。util。并发。锁。读写锁;

导入Java。util。并发。锁。reentrantreadwritelock

公共类读写锁{

公共静态void main(String[] args) {

my cache lock my cache=new my cache lock();

for(int I=0;i5;i ) {

最终int temp=I;

新线程(()- {

myCache.put(temp ' ',temp ' ');

},String.valueOf(i)).start();

}

for(int I=0;i5;i ) {

最终int temp=I;

新线程(()- {

我的宝藏。get(temp ' ');

},String.valueOf(i)).start();

}

}

}

/*

*

* 自定义缓存

* */

//加读写锁,这样可以实现读的时候可以多个线程读(共享锁或者说读锁),写的时候只允许一个线程写(独享锁,写锁)

类MyCacheLock {

private volatile MapString,String map=new HashMap();

最终读写锁read write lock=new reentrantreadwritellock();

公共无效卖出(字符串键,字符串值){

readWriteLock.writeLock().lock();//独享锁,写锁

尝试{

系统。出去。println(线程。当前线程().getName()'写入关键);

map.put(key,value);

系统。出去。println(线程。当前线程().getName()'写入OK’);

} catch(异常e) {

e。printstacktrace();

}最后{

readWriteLock.writeLock().unlock();//共享锁或者说读锁

}

}

public void get(字符串键){

readWriteLock.readLock()。lock();//共享锁或者说读锁

尝试{

系统。出去。println(线程。当前线程().getName()'读取关键);

地图。get(键);

系统。出去。println(线程。当前线程().getName()'读取OK’);

} catch(异常e) {

e。printstacktrace();

}最后{

readWriteLock.readLock()。unlock();

}

}

}

//没有加锁,并发一定会发生问题

我的缓存类{

private volatile MapString,String map=new HashMap();

公共无效卖出(字符串键,字符串值){

系统。出去。println(线程。当前线程().getName()'写入关键);

map.put(key,value);

系统。出去。println(线程。当前线程().getName()'写入OK’);

}

public void get(字符串键){

系统。出去。println(线程。当前线程().getName()'读取关键);

地图。get(键);

系统。出去。println(线程。当前线程().getName()'读取OK’);

}

}

Link to comment
Share on other sites