夜光序言:
人和人在肉体上没什么差别,差别是在灵魂上,你的精神世界有多大,你的视野就有多大,你的事业就有多大。
正文:
以道御术 / 以术识道
package 读写锁;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class Demo {
private Map<String,Object> map = new HashMap<>();
//这里看一下
private ReadWriteLock rwl = new ReentrantReadWriteLock();
//夜光:读锁
private Lock r = rwl.readLock();
//夜光:写锁
private Lock w = rwl.writeLock();
//定义一个get方法
public Object get(String key){
r.lock();
System.out.println(Thread.currentThread().getName() + "读操作在执行。。");
try{
try { //这里,我们添加一个睡眠的时间
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return map.get(key);
}finally {
System.out.println(Thread.currentThread().getName() + "读操作完毕。。");
r.unlock();
}
}
public void put(String key,Object value){
w.lock();
System.out.println(Thread.currentThread().getName() + "写操作在执行。。");
try{
try { //这里,我们添加一个睡眠的时间
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
map.put(key,value);
}finally {
w.unlock();
System.out.println(Thread.currentThread().getName() + "写操作完毕。。");
}
}
}
package 读写锁;
//我们写一个测试
public class Main {
public static void main(String[] args) {
Demo d = new Demo();
// d.put("a",10);
// d.put("b",20);
new Thread(new Runnable() {
@Override
public void run() {
// System.out.println(d.get("a"));
d.put("key1","value1");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
// System.out.println(d.get("a"));
d.put("key2","value2");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
// System.out.println(d.get("a"));
d.put("key3","value3");
}
}).start();
}
}
synchronized关键词
package synchronized关键词.lock;
import java.util.concurrent.locks.ReentrantLock;
public class Test {
static L l = new L();//我们可以把这设置成静态的
static ReentrantLock reentrantLock = new ReentrantLock();
public static void main(String[] args) {
lockTest();
}
public static void lockTest(){
// synchronized (this)如果是非静态方法,我们可以传一个this
//入门级问题
//java当中有哪些锁
//锁什么?锁 l 对象?锁代码块?
reentrantLock.lock(); //先上锁
System.out.println("1111");
reentrantLock.unlock(); //再解锁
synchronized (l){
System.out.println("Genius Team");
}
}
}