今碰到一问题,原以为代码用上 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
分享到:
相关推荐
以下是一个简单的Lock使用示例,展示了ReentrantLock的使用: ```java ReentrantLock lock = new ReentrantLock(); public static void main(String[] args) throws InterruptedException { lock.lock(); // 获取...
- **阻塞线程**:线程入队后,通过LockSupport.park()方法阻塞当前线程。 - **出队与唤醒**:当锁被释放时,会唤醒队列头部等待状态为-1的线程。被唤醒的线程尝试获取锁,成功则继续执行,失败则再次进入等待队列...
4. **LockSupport**:这是一个低级别的线程阻塞和唤醒工具,提供`park()`和`unpark()`方法,避免了`Thread.suspend()`和`Thread.resume()`可能导致的死锁问题。 5. **Condition接口**:Condition允许更精确的线程间...
`park()`和`unpark()`是`java.util.concurrent.locks.LockSupport`类中的方法,它们提供了一种低级别的线程阻塞和唤醒机制。`park()`可以使当前线程暂停执行,直到被`unpark()`或者其他外部因素唤醒。`unpark()`则...
4. **可重入性**:synchronized和ReentrantLock(Lock的一个实现)都是可重入的,意味着一个线程在持有锁的情况下可以再次获取该锁,防止死锁的发生。 5. **公平性和非公平性**:ReentrantLock提供了公平锁和非公平...
- 使用`LockSupport.park()`和`LockSupport.unpark()`来精细化控制线程的阻塞和唤醒。 - 尽可能使用无锁编程(如原子变量、并发容器等)和并发工具类,减少锁的使用。 在实际开发中,聪明地使用锁意味着要根据...
同步锁的实现基于 monitors,每个对象都有一个与之关联的monitor,当一个线程进入synchronized代码块或方法时,会尝试获取对象的锁,如果成功,其他线程将无法同时获得该锁,必须等待锁释放后才能再次尝试获取。...
本文将基于JDK源码解析Java领域中的并发锁,探讨AQS基础同步器、LockSupport、Condition接口、Lock接口、ReadWriteLock接口以及自定义API操作的设计与实现。 一、AQS(AbstractQueuedSynchronizer)基础同步器的...
状态间的转换取决于线程的行为,如start()方法使线程进入Runnable状态,而调用wait()、join()或LockSupport.park()等方法会使线程进入等待状态。 Java中的线程分为两类:守护线程和用户线程。守护线程不阻止JVM退出...
ReentrantLock是Lock接口的一个具体实现,它支持可重入性,即一个线程可以多次获取同一个锁,而不会导致死锁。 相比于synchronized,Lock接口提供了以下几个主要优势: 1. **中断支持**:Lock接口提供了`...
- **基本介绍**: `ReentrantLock` 是一个实现了 `Lock` 接口的可重入互斥锁,提供比 `synchronized` 更丰富的功能。与 `synchronized` 不同的是,`ReentrantLock` 是一个非内置锁,必须通过显式的调用来获取和释放锁...
5. 使用tryLock()方法:代替synchronized关键字,使用ReentrantLock类的tryLock()方法,它允许尝试获取锁,如果失败则立即返回,这样可以避免线程无限期等待。 6. 避免资源的循环等待:确保没有线程会等待它已经...
- `park()`和`unpark()`:`LockSupport`工具类中的阻塞/唤醒方法。 13. **线程同步与互斥**: - 线程互斥:确保同一时刻只有一个线程访问共享资源。 - 线程同步:控制多个线程有序访问资源,防止数据不一致。 ...
- **条件队列**:`AbstractQueuedSynchronizer`(AQS)提供了基于条件的线程等待/唤醒机制,是`LockSupport.park()`和`LockSupport.unpark()`底层实现的基础。 7. **线程异常处理** - **Thread....
HSDIS查看Java代码的汇编指令 java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssemble 使用 LockSupport.park()and unpark() public static void main(String[] ... Lock lock = new ReentrantLock(); Condition
`park`和`unpark`是`LockSupport`提供的方法,用于线程的阻塞和唤醒控制。`yield`让当前线程自愿放弃CPU时间片,但并不保证其他线程会被立即调度。`join`等待其他线程结束,`wait`和`notify`是对象监视器(Monitor)...