`

停个车真的不是一般的难ReentrantLock.lock之LockSupport.park

    博客分类:
  • Java
阅读更多
今碰到一问题,原以为代码用上 ReentrantLock.lock 想当然以为就是个很好用的东西,至少说不会出大问题吧,可是万万没有想到的是:

在Web Container最大线程数设置了500线情况下,压力测试了一把,居然给我满了,一看,原来这么壮观的场面,第一次碰到。圈中的代码省略,大家看看估计会是由于什么问题导致的?



根据目前存在的问题,特提供如下性能与代码方面相关的资料,以供参考

Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁
http://www.ibm.com/developerworks/cn/java/j-jtp10264/

非阻塞算法简介
http://www.ibm.com/developerworks/cn/java/j-jtp04186/

并发集合类
http://www.ibm.com/developerworks/cn/java/j-jtp07233/

Java 语言与编程实践
http://www.ibm.com/developerworks/cn/java/coretech/java-lang.html

有车容易,停个车难。图中特地用513的线程号表示“我要车”,左边绿色的Running状态的那就来表示开着车在找车位吧,我汗:)

发完贴子一看,居然在Running的状态的线程号是“346”,那岂不是刚好为“塞死了”,爆汗ing...

周末了,乐一乐先:)
  • 大小: 258.9 KB
分享到:
评论
2 楼 C_J 2010-01-26  
ReentrantLock 是用的fair 还是nofair呢? 没结果了吗?这帖子
1 楼 taupo 2009-07-18  
我太菜了,不知所云。。。。。。。。。

相关推荐

    java的Lock锁原理详解.docx

    以下是一个简单的Lock使用示例,展示了ReentrantLock的使用: ```java ReentrantLock lock = new ReentrantLock(); public static void main(String[] args) throws InterruptedException { lock.lock(); // 获取...

    ReentrantLock流程浅析

    - **阻塞线程**:线程入队后,通过LockSupport.park()方法阻塞当前线程。 - **出队与唤醒**:当锁被释放时,会唤醒队列头部等待状态为-1的线程。被唤醒的线程尝试获取锁,成功则继续执行,失败则再次进入等待队列...

    Java concurrency之锁_动力节点Java学院

    4. **LockSupport**:这是一个低级别的线程阻塞和唤醒工具,提供`park()`和`unpark()`方法,避免了`Thread.suspend()`和`Thread.resume()`可能导致的死锁问题。 5. **Condition接口**:Condition允许更精确的线程间...

    Java 多线程共享模型之管程(下).doc

    `park()`和`unpark()`是`java.util.concurrent.locks.LockSupport`类中的方法,它们提供了一种低级别的线程阻塞和唤醒机制。`park()`可以使当前线程暂停执行,直到被`unpark()`或者其他外部因素唤醒。`unpark()`则...

    笔记-4、显式锁和AQS1

    4. **可重入性**:synchronized和ReentrantLock(Lock的一个实现)都是可重入的,意味着一个线程在持有锁的情况下可以再次获取该锁,防止死锁的发生。 5. **公平性和非公平性**:ReentrantLock提供了公平锁和非公平...

    如何聪明地使用锁

    - 使用`LockSupport.park()`和`LockSupport.unpark()`来精细化控制线程的阻塞和唤醒。 - 尽可能使用无锁编程(如原子变量、并发容器等)和并发工具类,减少锁的使用。 在实际开发中,聪明地使用锁意味着要根据...

    Java concurrency之锁_动力节点Java学院整理

    同步锁的实现基于 monitors,每个对象都有一个与之关联的monitor,当一个线程进入synchronized代码块或方法时,会尝试获取对象的锁,如果成功,其他线程将无法同时获得该锁,必须等待锁释放后才能再次尝试获取。...

    基于JDK源码解析Java领域中的并发锁之设计与实现.pdf

    本文将基于JDK源码解析Java领域中的并发锁,探讨AQS基础同步器、LockSupport、Condition接口、Lock接口、ReadWriteLock接口以及自定义API操作的设计与实现。 一、AQS(AbstractQueuedSynchronizer)基础同步器的...

    并发编程从入门到放弃系列开始和结束.doc

    状态间的转换取决于线程的行为,如start()方法使线程进入Runnable状态,而调用wait()、join()或LockSupport.park()等方法会使线程进入等待状态。 Java中的线程分为两类:守护线程和用户线程。守护线程不阻止JVM退出...

    笔记-4、显式锁和AQS(1)1

    ReentrantLock是Lock接口的一个具体实现,它支持可重入性,即一个线程可以多次获取同一个锁,而不会导致死锁。 相比于synchronized,Lock接口提供了以下几个主要优势: 1. **中断支持**:Lock接口提供了`...

    java并发编程-AQS和JUC实战

    - **基本介绍**: `ReentrantLock` 是一个实现了 `Lock` 接口的可重入互斥锁,提供比 `synchronized` 更丰富的功能。与 `synchronized` 不同的是,`ReentrantLock` 是一个非内置锁,必须通过显式的调用来获取和释放锁...

    java 中死锁问题的实例详解

    5. 使用tryLock()方法:代替synchronized关键字,使用ReentrantLock类的tryLock()方法,它允许尝试获取锁,如果失败则立即返回,这样可以避免线程无限期等待。 6. 避免资源的循环等待:确保没有线程会等待它已经...

    Java面试题线程部分.docx

    - `park()`和`unpark()`:`LockSupport`工具类中的阻塞/唤醒方法。 13. **线程同步与互斥**: - 线程互斥:确保同一时刻只有一个线程访问共享资源。 - 线程同步:控制多个线程有序访问资源,防止数据不一致。 ...

    Java 多线程 设计模式

    - **条件队列**:`AbstractQueuedSynchronizer`(AQS)提供了基于条件的线程等待/唤醒机制,是`LockSupport.park()`和`LockSupport.unpark()`底层实现的基础。 7. **线程异常处理** - **Thread....

    华为Java高级面试题:用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D…26Z

    HSDIS查看Java代码的汇编指令 java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssemble 使用 LockSupport.park()and unpark() public static void main(String[] ... Lock lock = new ReentrantLock(); Condition

    JUC学习.docx Java

    `park`和`unpark`是`LockSupport`提供的方法,用于线程的阻塞和唤醒控制。`yield`让当前线程自愿放弃CPU时间片,但并不保证其他线程会被立即调度。`join`等待其他线程结束,`wait`和`notify`是对象监视器(Monitor)...

Global site tag (gtag.js) - Google Analytics