Edit C:\Program Files\Java\jdk1.8.0_121\com\sun\webkit\network\ByteBufferPool.java
/* * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package com.sun.webkit.network; import java.nio.ByteBuffer; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.Semaphore; /** * A pool of byte buffers that can be shared by multiple concurrent * clients. */ final class ByteBufferPool { /** * The shared collection of byte buffers. */ private final Queue<ByteBuffer> byteBuffers = new ConcurrentLinkedQueue<ByteBuffer>(); /** * The size of each byte buffer. */ private final int bufferSize; /** * Creates a new pool. */ private ByteBufferPool(int bufferSize) { this.bufferSize = bufferSize; } /** * Creates a new pool. */ static ByteBufferPool newInstance(int bufferSize) { return new ByteBufferPool(bufferSize); } /** * Creates a new allocator associated with this pool. * The allocator will allow its client to allocate and release * buffers and will ensure that there are no more than * {@code maxBufferCount} buffers allocated through this allocator * at any given time moment. */ ByteBufferAllocator newAllocator(int maxBufferCount) { return new ByteBufferAllocatorImpl(maxBufferCount); } /** * The allocator implementation. */ private final class ByteBufferAllocatorImpl implements ByteBufferAllocator { /** * The semaphore used to limit the number of buffers * allocated through this allocator. */ private final Semaphore semaphore; /** * Creates a new allocator. */ private ByteBufferAllocatorImpl(int maxBufferCount) { semaphore = new Semaphore(maxBufferCount); } /** * {@inheritDoc} */ @Override public ByteBuffer allocate() throws InterruptedException { semaphore.acquire(); ByteBuffer byteBuffer = byteBuffers.poll(); if (byteBuffer == null) { byteBuffer = ByteBuffer.allocateDirect(bufferSize); } return byteBuffer; } /** * {@inheritDoc} */ @Override public void release(ByteBuffer byteBuffer) { byteBuffers.add(byteBuffer); semaphore.release(); } } } /** * An object that can allocate and release byte buffers. */ interface ByteBufferAllocator { /** * Allocates a byte buffer. */ ByteBuffer allocate() throws InterruptedException; /** * Releases a byte buffer. */ void release(ByteBuffer byteBuffer); }
Ms-Dos/Windows
Unix
Write backup
jsp File Browser version 1.2 by
www.vonloesch.de