`
jaesonchen
  • 浏览: 313096 次
  • 来自: ...
社区版块
存档分类
最新评论

synchronized 不公平锁

 
阅读更多
import java.util.ArrayList;
import java.util.List;

/*
 * 这段代码大多数情况下运行正常,但是某些情况下会出问题。什么时候会出现什么问题?如何修正?
 * 
 * notify时如果入口区也有等待线程,这时需要等待区和入口区线程竞争获得锁。
 * synchronized是不公平锁
 */
public class MyStack {
	
    private List<String> list = new ArrayList<String>();
  
    public synchronized void push(String value) {
        synchronized (this) {
            list.add(value);
            notify();
        }
    }
  
    public synchronized String pop() throws InterruptedException {
        synchronized (this) {
        	//改为while (list.size() <= 0)
            if (list.size() <= 0) {
                wait();  
            }
            return list.remove(list.size() - 1);
        }
    }
}

 

分享到:
评论

相关推荐

    synchronized枷锁实例

    在Java中,`synchronized`关键字默认实现的是非公平锁,这意味着线程获取锁的顺序并不是先来后到。一个线程即使已经等待很久,也有可能在其他线程释放锁后立即获得锁,而不是让等待时间最长的线程优先获取。 **锁的...

    简单聊聊Synchronized和ReentrantLock锁.docx

    ReentrantLock允许显式获取和释放锁,并且支持更丰富的锁原语,如公平锁、非公平锁、可中断锁、定时锁等。通过lock()和unlock()方法,程序员可以更好地控制锁的生命周期。此外,ReentrantLock还支持锁的条件条件...

    Java synchronized使用案例

    1. **ReentrantLock**:具有`synchronized`的可重入性,并且提供公平锁、非公平锁选择,支持尝试获取锁、中断锁等待等高级功能。 2. **Semaphore**:信号量,可以控制同时访问特定资源的线程数量。 3. **...

    ReentrantLock 与 synchronized 简介

    - 它支持公平和非公平两种获取锁的策略,默认为非公平锁。 2. **重要特性**: - **可中断等待**:通过`lock.tryLock()`和`lock.tryLock(long timeout, TimeUnit unit)`方法,可以在等待获取锁时响应中断。 - **...

    synchronized关键字的实质及用法

    Java 5引入了`java.util.concurrent.locks.ReentrantLock`,它提供了与`synchronized`相似的功能,但具有更多高级特性,如可中断的等待、公平锁等。在某些情况下,ReentrantLock可能比`synchronized`更适合。 8. *...

    java同步synchronized关键字用法示例

    在Java 5之后,引入了`java.util.concurrent`包,其中的`ReentrantLock`类提供了可重入锁,它具有与`synchronized`相似的功能,但更加灵活,支持公平锁、非公平锁以及可中断的锁等待。 **5. synchronized的应用示例...

    22 到底哪把锁更适合你?—synchronized与ReentrantLock对比.pdf

    公平锁确保线程按等待顺序获取锁,而非公平锁则可能导致线程插队。`synchronized`默认是非公平的,且不支持公平模式。 - `ReentrantLock`支持定时和轮询尝试获取锁,这意味着如果锁在指定时间内未释放,线程可以...

    [JAVA][synchronized的使用]

    - **ReentrantLock**:是Java并发包`java.util.concurrent.locks`中的可重入锁,提供了比`synchronized`更细粒度的控制,支持公平锁和非公平锁,以及可中断和可定时的获取锁。 7. **TestSynchronized 示例** 通常...

    Java 同步锁(synchronized)详解及实例

    除此之外,Java 5引入了更高级的并发工具类,如`java.util.concurrent.locks`包下的`ReentrantLock`,它提供了可中断和公平性的锁,以及更多的同步控制选项。但在大多数简单场景下,`synchronized`关键字已经足够...

    ReentrantLock与synchronized

    - 不支持公平锁,即线程获取锁的顺序并不总是按照它们请求锁的时间顺序进行。 - 无法中断正在等待获取锁的线程,除非抛出异常或者调用`Thread.interrupt()`。 - 不能知道哪个线程持有锁,也无法知道锁的状态。 *...

    第15讲 synchronized和ReentrantLock有什么区别呢?1

    ReentrantLock的一个关键特性是可设置公平性,这意味着线程可以按照它们请求锁的顺序来获取锁,而synchronized则是非公平的。此外,ReentrantLock还支持条件变量,允许更复杂的同步控制,如等待队列的管理。 性能...

    多线程(11)ReentrantLock公平锁与非公平锁(修改)1

    非公平锁并不保证线程的获取顺序,它允许线程在尝试获取锁时跳过队列的末尾,直接进行尝试。在`main`方法中,后两个线程使用的是非公平锁(`unfairLock`)。这意味着即使在其他线程已经在等待的情况下,新线程也...

    详细解读java同步之synchronized解析

    `synchronized`默认是非公平锁,不保证线程获取锁的顺序。线程获取锁时,不是按照等待时间的长短,而是采用抢占式的策略。但Java 1.6引入了一些优化,包括自旋锁等,以减少锁的阻塞时间。 ### 5. synchronized的...

    【Java并发编程】Synchronized关键字实现原理.doc

    Synchronized 关键字的主要特性是同步锁、非公平锁、阻塞锁,可以保证线程安全。线程安全是指在多线程环境下,程序的执行结果不受线程调度的影响,始终如一。Synchronized 关键字可以保障线程安全的三个方面:原子性...

    0积分免费下载,金九银十期间,个人经历的面试题,适合三到五年经验

    (5)ReentrantLock可以中断响应,通过设置超时或调用中断方法,Synchronized不可中断响应 (6)Synchronized锁是非公平锁,ReentrantLock可以设置是否公平 (7)Synchronized锁有升级机制,ReentrantLock没有

    Lock接口与synchronized关键字

    #### 六、Lock接口提供的synchronized不具备的主要特性 1. **可操作性**:Lock接口允许开发者显式地控制锁的获取和释放过程,从而提供更高的灵活性。 2. **可中断地获取锁**:通过`tryLock(long timeout, TimeUnit ...

    Synchronized与Lock

    ReentrantLock支持公平锁和非公平锁的选择,公平锁保证按照等待时间顺序获取锁,而非公平锁则可能让等待时间短的线程优先获得锁。Lock还提供了一些synchronized不具备的功能,比如: 1. 可以尝试获取锁,即tryLock...

    21 更高级的锁—深入解析Lock.pdf

    synchronized是非公平锁,线程获取锁的顺序不确定。而ReentrantLock则提供了公平锁和非公平锁的选择。公平锁按照等待队列的顺序分配锁,而非公平锁不保证这一顺序。默认构造函数创建的是非公平锁,如果需要公平锁,...

    【Java】synchronized同步锁详解

    Java中ReentrantLock的公平锁在未获取锁时会先尝试自旋。 2. **synchronized同步锁(悲观锁)**: - **作用范围**: - 作用于实例方法:锁定当前对象实例,同一时刻只允许一个线程访问该对象的所有同步方法和同步...

Global site tag (gtag.js) - Google Analytics