读写锁--ReadwriteLock 和线程八锁
1.写写/读写 需要互斥
2.ReadwriteLock底层维护了两对锁,一个是读锁readLock(),一个是写锁wriyeLock(),
/*
* 题目:判断打印的 "one" or "two" ?
*
* 1. 两个普通同步方法,两个线程,标准打印, 打印? //one two
* 2. 新增 Thread.sleep() 给 getOne() ,打印? //one two
* 3. 新增普通方法 getThree() , 打印? //three one two
* 4. 两个普通同步方法,两个 Number 对象,打印? //two one
* 5. 修改 getOne() 为静态同步方法,打印? //two one
* 6. 修改两个方法均为静态同步方法,一个 Number 对象? //one two
* 7. 一个静态同步方法,一个非静态同步方法,两个 Number 对象? //two one
* 8. 两个静态同步方法,两个 Number 对象? //one two
*
* 线程八锁的关键:
* ①非静态方法的锁默认为 this, 静态方法的锁为 对应的 Class 实例
* ②某一个时刻内,只能有一个线程持有锁,无论几个方法。
*/
public class TestThread8Monitor {
public static void main(String[] args) {
Number number = new Number();
Number number2 = new Number();
new Thread(new Runnable() {
@Override
public void run() {
number.getOne();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
// number.getTwo();
number2.getTwo();
}
}).start();
/*new Thread(new Runnable() {
@Override
public void run() {
number.getThree();
}
}).start();*/
}
}
class Number{
public static synchronized void getOne(){//Number.class
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println("one");
}
public synchronized void getTwo(){//this
System.out.println("two");
}
public void getThree(){
System.out.println("three");
}
- linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁
- 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据
- 2.使用synchronized关键字实现多线程的同步和互斥(不同线程同时读写同一数据)
- linux编程---线程---读写锁
- linux信号量实现线程读写同步
- java多线程 -- 线程八锁
- 【面经笔记】线程、多线程 - 死锁、读写、消费者问题、TLS【续2】
- vb.net的异步读写数据流(使用线程、委托)
- 线程模型--读写模型
- 读写线程
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_互锁,读写锁
- 线程使用之读写锁
- linux线程间同步(1)读写锁
- (生产者消费者)线程池、 多线程读写线程
- 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据
- STL线程不安全的读写处理
- 线程 读写锁
- 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据
- 线程高级---读写锁
- Go语言 线程简单读写