当前位置: 首页>>代码示例>>Java>>正文


Java Condition.signal方法代码示例

本文整理汇总了Java中java.util.concurrent.locks.Condition.signal方法的典型用法代码示例。如果您正苦于以下问题:Java Condition.signal方法的具体用法?Java Condition.signal怎么用?Java Condition.signal使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在java.util.concurrent.locks.Condition的用法示例。


在下文中一共展示了Condition.signal方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: deallocate

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
/**
 * Return buffers to the pool. If they are of the poolable size add them to the free list, otherwise just mark the
 * memory as free.
 *
 * @param buffer The buffer to return
 * @param size The size of the buffer to mark as deallocated, note that this may be smaller than buffer.capacity
 *             since the buffer may re-allocate itself during in-place compression
 */
// 释放ByteBuffer,返回到pool里
public void deallocate(ByteBuffer buffer, int size) {
    lock.lock();
    try {
        // 如果byteBuffer的大小是poolablesize,放入free队列中进行管理
        if (size == this.poolableSize && size == buffer.capacity()) {
            buffer.clear();
            this.free.add(buffer);
        } else {
            // 释放的ByteBuffer的大小不是poolableSize,不会服用ByteBuffer,仅修改availableMemory
            this.availableMemory += size;
        }
        // 唤醒一个因空间不足而阻塞的线程
        Condition moreMem = this.waiters.peekFirst();
        if (moreMem != null)
            moreMem.signal();
    } finally {
        // 解锁
        lock.unlock();
    }
}
 
开发者ID:YMCoding,项目名称:kafka-0.11.0.0-src-with-comment,代码行数:30,代码来源:BufferPool.java

示例2: testAwait

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testAwait(boolean fair) {
    final PublicReentrantReadWriteLock lock =
        new PublicReentrantReadWriteLock(fair);
    final Condition c = lock.writeLock().newCondition();
    final CountDownLatch locked = new CountDownLatch(1);
    Thread t = newStartedThread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.writeLock().lock();
            locked.countDown();
            c.await();
            lock.writeLock().unlock();
        }});

    await(locked);
    lock.writeLock().lock();
    assertHasWaiters(lock, c, t);
    c.signal();
    assertHasNoWaiters(lock, c);
    assertTrue(t.isAlive());
    lock.writeLock().unlock();
    awaitTermination(t);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:23,代码来源:ReentrantReadWriteLockTest.java

示例3: testGetWaitQueueLength

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testGetWaitQueueLength(boolean fair) {
    final PublicReentrantReadWriteLock lock =
        new PublicReentrantReadWriteLock(fair);
    final Condition c = lock.writeLock().newCondition();
    final CountDownLatch locked = new CountDownLatch(1);
    Thread t = newStartedThread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.writeLock().lock();
            assertEquals(0, lock.getWaitQueueLength(c));
            locked.countDown();
            c.await();
            lock.writeLock().unlock();
        }});

    await(locked);
    lock.writeLock().lock();
    assertHasWaiters(lock, c, t);
    assertEquals(1, lock.getWaitQueueLength(c));
    c.signal();
    assertHasNoWaiters(lock, c);
    assertEquals(0, lock.getWaitQueueLength(c));
    lock.writeLock().unlock();
    awaitTermination(t);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:25,代码来源:ReentrantReadWriteLockTest.java

示例4: testAwait

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testAwait(boolean fair) {
    final PublicReentrantLock lock = new PublicReentrantLock(fair);
    final Condition c = lock.newCondition();
    final CountDownLatch locked = new CountDownLatch(1);
    Thread t = newStartedThread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.lock();
            locked.countDown();
            c.await();
            lock.unlock();
        }});

    await(locked);
    lock.lock();
    assertHasWaiters(lock, c, t);
    c.signal();
    assertHasNoWaiters(lock, c);
    assertTrue(t.isAlive());
    lock.unlock();
    awaitTermination(t);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:22,代码来源:ReentrantLockTest.java

示例5: signal

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
private static void signal(Lock lock, Condition condition, Runnable runnable) {
    boolean interrupted = Thread.interrupted();
    lock.lock();
    try {
        runnable.run();
        condition.signal();
    } finally {
        lock.unlock();
        if (interrupted) {
            Thread.currentThread().interrupt();
        }
    }
}
 
开发者ID:lxxlxx888,项目名称:Reer,代码行数:14,代码来源:DefaultFileSystemChangeWaiterFactory.java

示例6: testSignal_IMSE

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testSignal_IMSE(boolean fair) {
    final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
    final Condition c = lock.writeLock().newCondition();
    try {
        c.signal();
        shouldThrow();
    } catch (IllegalMonitorStateException success) {}
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:9,代码来源:ReentrantReadWriteLockTest.java

示例7: testHasWaiters

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testHasWaiters(boolean fair) {
    final PublicReentrantReadWriteLock lock =
        new PublicReentrantReadWriteLock(fair);
    final Condition c = lock.writeLock().newCondition();
    final CountDownLatch locked = new CountDownLatch(1);
    Thread t = newStartedThread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.writeLock().lock();
            assertHasNoWaiters(lock, c);
            assertFalse(lock.hasWaiters(c));
            locked.countDown();
            c.await();
            assertHasNoWaiters(lock, c);
            assertFalse(lock.hasWaiters(c));
            lock.writeLock().unlock();
        }});

    await(locked);
    lock.writeLock().lock();
    assertHasWaiters(lock, c, t);
    assertTrue(lock.hasWaiters(c));
    c.signal();
    assertHasNoWaiters(lock, c);
    assertFalse(lock.hasWaiters(c));
    lock.writeLock().unlock();
    awaitTermination(t);
    assertHasNoWaiters(lock, c);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:29,代码来源:ReentrantReadWriteLockTest.java

示例8: testSignal_IMSE

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testSignal_IMSE(boolean fair) {
    final ReentrantLock lock = new ReentrantLock(fair);
    final Condition c = lock.newCondition();
    try {
        c.signal();
        shouldThrow();
    } catch (IllegalMonitorStateException success) {}
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:9,代码来源:ReentrantLockTest.java

示例9: testHasWaiters

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testHasWaiters(boolean fair) {
    final PublicReentrantLock lock = new PublicReentrantLock(fair);
    final Condition c = lock.newCondition();
    final CountDownLatch pleaseSignal = new CountDownLatch(1);
    Thread t = newStartedThread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.lock();
            assertHasNoWaiters(lock, c);
            assertFalse(lock.hasWaiters(c));
            pleaseSignal.countDown();
            c.await();
            assertHasNoWaiters(lock, c);
            assertFalse(lock.hasWaiters(c));
            lock.unlock();
        }});

    await(pleaseSignal);
    lock.lock();
    assertHasWaiters(lock, c, t);
    assertTrue(lock.hasWaiters(c));
    c.signal();
    assertHasNoWaiters(lock, c);
    assertFalse(lock.hasWaiters(c));
    lock.unlock();
    awaitTermination(t);
    assertHasNoWaiters(lock, c);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:28,代码来源:ReentrantLockTest.java

示例10: subQueryFinished

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
private void subQueryFinished(AtomicInteger subNodes, ReentrantLock lock, AtomicBoolean finished, Condition finishSubQuery) {
    if (subNodes.decrementAndGet() == 0) {
        lock.lock();
        try {
            finished.set(true);
            finishSubQuery.signal();
        } finally {
            lock.unlock();
        }
    }
}
 
开发者ID:actiontech,项目名称:dble,代码行数:12,代码来源:BaseHandlerBuilder.java

示例11: testSignalWakesFifo

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testSignalWakesFifo(boolean fair) {
    final PublicReentrantLock lock =
        new PublicReentrantLock(fair);
    final Condition c = lock.newCondition();
    final CountDownLatch locked1 = new CountDownLatch(1);
    final CountDownLatch locked2 = new CountDownLatch(1);
    Thread t1 = newStartedThread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.lock();
            locked1.countDown();
            c.await();
            lock.unlock();
        }});

    await(locked1);

    Thread t2 = newStartedThread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.lock();
            locked2.countDown();
            c.await();
            lock.unlock();
        }});

    await(locked2);

    lock.lock();
    assertHasWaiters(lock, c, t1, t2);
    assertFalse(lock.hasQueuedThreads());
    c.signal();
    assertHasWaiters(lock, c, t2);
    assertTrue(lock.hasQueuedThread(t1));
    assertFalse(lock.hasQueuedThread(t2));
    c.signal();
    assertHasNoWaiters(lock, c);
    assertTrue(lock.hasQueuedThread(t1));
    assertTrue(lock.hasQueuedThread(t2));
    lock.unlock();
    awaitTermination(t1);
    awaitTermination(t2);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:42,代码来源:ReentrantLockTest.java


注:本文中的java.util.concurrent.locks.Condition.signal方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。