共计 746 个字符,预计需要花费 2 分钟才能阅读完成。
多线程核心的两个对象
Lock lock; // any Object can be a Lock
Thread thread; // thread just a thread
抢锁 / 释放锁
/*
!! FAKE CODE
*/
Object specificLock = new Object();
int initialSize = 1_000_000;
List<thread> threadList = new ArrayList<>();
for (int i = 0; i < initialSize ; i++) {threadList.add(new Thread());
}
// ????, pity, Thread.class don't have a method called rob();
robSuccessThread = threadList[0 ... 999_999].robAtTheSameTime(specificLock);
doSomething();
robSuccessThread.release(specificLock);
-
线程
是操作系统
最基础的调度单元
-
线程对锁的获取及释放
由操作系统
完全掌控,用户
无权控制线程对锁的抢占 / 释放成功与否
-
JVM
对系统线程
进行封装, 提供synchronized
关键字
Object lock = new Object();
synchronized (lock) {
// moniter-enter, 抢 lock 成功, 才会进入此区块, 抢 lock 失败, 则进入等锁队列;
doSomething();} // moniter-exit, 释放 lock
synchronized
的语义: 多条线程同时执行到此对象实例的方法时, 仅有抢锁成功的线程能够进入区块执行; 其余抢锁失败的线程, 则进入到等锁队列
- 拆解一下,
syn 关键字
, 其实涉及到5 个对象
:线程 | 对象实例 | 方法 | 锁 | 等锁队列
;
正文完