Java-由面向对象看多线程

6次阅读

共计 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 个对象: 线程 | 对象实例 | 方法 | 锁 | 等锁队列;

正文完
 0