package projects.debug.learn;
import java.util.Collection;
import java.util.Iterator;
import java.util.Queue;
import java.util.concurrent.Semaphore;
public class SyncQueue implements Queue
{
private final Queue mQueue;
private final int mCapacity;
private final Semaphore mSemProducer;
private final Semaphore mSemConsumer;
public SyncQueue(Queue queue)
{
this(queue, Integer.MAX_VALUE);
}
public SyncQueue(Queue queue, int capacity)
{
mQueue = queue;
mCapacity = capacity;
mSemProducer = new Semaphore(capacity);
mSemConsumer = new Semaphore(0);
}
public Object get()
{
// Accquire consumer's semaphore
try
{
mSemConsumer.acquire();
}
catch(InterruptedException ie)
{
Thread.currentThread().interrupt();
return null;
}
// Get the item
Object item = null;
synchronized(mQueue)
{
item = mQueue.poll();
}
//
mSemProducer.release();
return item;
}
public boolean put(Object item)
{
// Precondition checking
if(item == null)
{
return false;
}
// Accquire producer's semaphore
try
{
mSemProducer.acquire();
}
catch(InterruptedException ie)
{
Thread.currentThread().interrupt();
return false;
}
// Add the item
synchronized(mQueue)
{
mQueue.add(item);
}
// Release consumer's semaphore
mSemConsumer.release();
return true;
}
public Object element()
{
// TODO Auto-generated method stub
return null;
}
public boolean offer(Object o)
{
// TODO Auto-generated method stub
return false;
}
public Object peek()
{
// TODO Auto-generated method stub
return null;
}
public Object poll()
{
// TODO Auto-generated method stub
return null;
}
public Object remove()
{
// TODO Auto-generated method stub
return null;
}
public boolean add(Object o)
{
// TODO Auto-generated method stub
return false;
}
public boolean addAll(Collection c)
{
// TODO Auto-generated method stub
return false;
}
public void clear()
{
// TODO Auto-generated method stub
}
public boolean contains(Object o)
{
// TODO Auto-generated method stub
return false;
}
public boolean containsAll(Collection c)
{
// TODO Auto-generated method stub
return false;
}
public boolean isEmpty()
{
// TODO Auto-generated method stub
return false;
}
public Iterator iterator()
{
// TODO Auto-generated method stub
return null;
}
public boolean remove(Object o)
{
// TODO Auto-generated method stub
return false;
}
public boolean removeAll(Collection c)
{
// TODO Auto-generated method stub
return false;
}
public boolean retainAll(Collection c)
{
// TODO Auto-generated method stub
return false;
}
public int size()
{
// TODO Auto-generated method stub
return 0;
}
public Object[] toArray()
{
// TODO Auto-generated method stub
return null;
}
public Object[] toArray(Object[] a)
{
// TODO Auto-generated method stub
return null;
}
}
分享到:
相关推荐
semaphore完整搭建方案,包括帮助文档、程序源码、可执行程序。按照帮助文档完整搭建可视化ansible部署解决方案
关于Android变成中的信号量semaphore,在使用过程中我们往往搞不清楚其信号量的申请和使用。这里主要针对信号量初始值为零的情况做介绍,其他情况不做讨论。初始值为零的情况较少使用,部分代码中的这个情况往往让...
使用信号量(Semaphore)实现线程的同步
semaphore开发源码,ansible可视化部署服务程序,支持界面操作。
Semaphore的使用及其方法的使用。
mutex和semaphore互斥程序实例
semaphore控制多线程循序执行,网上 找的例子更改的希望对大家有用
Semaphore T-BOX System OverviewPDF,Semaphore T-BOX System Overview
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...
Semaphore_TBOX_产品-软件及系统功能
多线程(C++)同步Semaphore
Linux下多线程编程-Pthread与Semaphore的使用.doc
C#语言Semaphore类用法实例,多线程 用于有多个同类型共享资源(比如端口)时,如何协调端口分配给线程访问资源的问题,是一个简单模拟实例(源代码)。
Semaphore进程间通讯测试源码,CreateSemaphoreW,OpenSemaphore,ReleaseSemaphore,WaitForSingleObjectEx
Semaphore 源码解析 通过使用Semaphore可以在高并发场景进行限流控制处理
本文分析了内核同步及互斥的几种机制Waitqueue、Event及Semaphore的实现,详细分析了其实现流程。Event及Semaphore本质上都是基于Waitqueue和自旋锁实现的。总结了静态定义及动态初始化数据结构的相关规则,这对于...
Ansible-semaphore.zip,可供选择的开源towerrelease,ansible是一个简单而强大的自动化引擎。它用于帮助配置管理、应用程序部署和任务自动化。
windows下安装cygwin,编译darknet时缺少的三个头文件,下载后复制到darknet下include文件夹内即可
信号量+共享存储区的进程间通信,互斥、同步
在JAVA里面,我的理解是信号计数的作用,比如我想设置只能允许500个线程访问Web...这样就实现了控制的作用,当然这个功能咱们自己通过锁的机制可以自己完成,不过使用Semaphore比较简单、方便,这也是它产生的原因。