package com.cn;
import java.util.*;
import java.util.concurrent.Semaphore;
public class BoundedHashSet<T> {
private final Set<T> set;
private final Semaphore sem;
public BoundedHashSet(int bound){
this.set = Collections.synchronizedSet(new HashSet<T>());
sem = new Semaphore(bound);
}
public boolean add(T o) throws InterruptedException{
sem.acquire();
boolean wasAdded = false;
try{
wasAdded = set.add(o);
return wasAdded;
}finally{
if(!wasAdded){
sem.release();
}
}
}
public boolean remove(Object o){
boolean wasRemoved = set.remove(o);
if(wasRemoved){
sem.release();
}
return wasRemoved;
}
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
final BoundedHashSet<String> pool = new BoundedHashSet<String>(5);
for(int i = 0; i < 6; i++){
Thread thread = new Thread(new Worker(String.valueOf(i),pool));
thread.start();
}
Thread.currentThread().sleep(2000);
Thread thread = new Thread(new Worker2(String.valueOf(2),pool));
thread.start();
}
}
class Worker implements Runnable{
private final String s ;
final BoundedHashSet<String> pool;
public Worker(String s,BoundedHashSet<String> pool){
this.s = s;
this.pool = pool;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
pool.add(s);
System.out.println("set "+ s);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Worker2 implements Runnable{
private final String s ;
final BoundedHashSet<String> pool;
public Worker2(String s,BoundedHashSet<String> pool){
this.s = s;
this.pool = pool;
}
@Override
public void run() {
pool.remove(s);
System.out.println("remove "+ s);
}
}
分享到:
相关推荐
Semaphore计数信号量是指在多线程环境下,使用Semaphore来实现线程安全的计数信号量。例如,在桌⾯搜索时,使用Semaphore来实现线程安全的计数信号量,以避免出现死锁、竞态条件等问题。 Barrier栅栏是指在多线程...
- `Semaphore`和`CountDownLatch`:信号量和计数器,用于控制并发线程的数量,实现资源的限流或同步。 4. **Fork/Join框架**: Java 7引入的Fork/Join框架利用工作窃取算法,将大任务拆分为小任务,通过多线程...
- **tools部分**:同步工具类,如`Semaphore`(信号量)、`CountDownLatch`(闭锁)和`CyclicBarrier`(栅栏)。 #### 二、并发容器详解 并发容器是Java并发编程中的重要组成部分,它们提供了比传统集合类更强大的...
`Semaphore`(信号量)用于控制能够访问某些资源(如固定数量的许可证)的线程数量。它能够限制并发操作的数量,对于限制系统资源的访问非常有用。 **示例代码**: ```java @Slf4j public class SemaphoreExample1 ...
【标题】"semaforos3" 指的可能是一个与并发编程相关的项目或教程,其中“semaforos”在计算机科学中通常是指信号量(Semaphore),一种用于控制多线程或进程访问共享资源的同步机制。信号量在Java编程语言中是实现...
- **信号量**(Semaphore):控制同时访问特定资源的线程数量。 - **闭锁**(CountDownLatch):一次性计数器,用于等待其他线程完成操作。 - **栅栏**(CyclicBarrier):一组线程达到某个点时才继续执行。 - *...
7. **使用锁和信号量**:在某些情况下,可能需要使用锁(如ReentrantLock)或信号量(Semaphore)来控制对共享资源的访问,防止过多的并发操作导致问题。 8. **性能优化**:理解如何正确地处理线程上下文切换,避免...
(3)使用信号量将任何一种容器变成有界阻塞容器 栅栏 能够阻塞一组线程直到某个事件发生 栅栏和闭锁的区别 所有线程必须同时到达栅栏位置,才能继续执行 闭锁用于等待事件,而栅栏...
5. **信号量(Semaphore)**:虽然不是必须的,但信号量可以用于更优雅地管理缓冲区的满和空状态。C++标准库未直接提供信号量,但可以通过互斥量和条件变量模拟实现。 6. **线程同步**:在生产者消费者问题中,线程...
为了确保线程安全,开发者需要关注同步机制,如互斥量(mutex)、信号量(semaphore)或事件对象(event),防止数据竞争和资源冲突。 在“C++Builder线程样例”中,我们可能会看到以下几个关键部分: 1. **线程类...
最后,Java并发工具类,如Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(计数器门闩)和Exchanger(交换器),提供了更高级的同步和协调机制,有助于解决复杂并发场景的问题。 通过阅读《JAVA...
4. **线程同步**:为了解决多线程环境中的数据安全问题,Java提供了synchronized关键字、Lock接口(如ReentrantLock可重入锁)、Semaphore信号量等同步机制。 5. **死锁**:当两个或多个线程相互等待对方释放资源而...
为了解决多个线程间的共享数据安全问题,Java提供了多种同步机制,如`synchronized`关键字、`volatile`关键字、`java.util.concurrent`包中的`Lock`接口及其子类`ReentrantLock`,以及`Semaphore`信号量等。...
- 锁机制:包括内置锁(synchronized)、读写锁(ReentrantReadWriteLock)、信号量(Semaphore)等,用于控制并发访问。 - 原子变量(AtomicXXX类):提供无锁编程能力,保证原子性操作。 2. **反射与动态代理**...
2. **并发工具类**:Java并发包(java.util.concurrent)提供了丰富的并发工具类,如Semaphore(信号量)、CyclicBarrier(循环栅栏)、CountDownLatch(倒计时锁)等。这些工具帮助开发者更好地控制线程间的同步和...
- **同步机制**:synchronized关键字、Lock锁(如ReentrantLock)、信号量Semaphore、条件变量Condition等。 - **线程状态**:新建、就绪、运行、阻塞、死亡。 4. **反射**: - 反射API:Class类、Constructor类...
另外,Java并发包(java.util.concurrent)提供了更高级的并发工具,如Semaphore(信号量)、CyclicBarrier(回环栅栏)和CountDownLatch(倒计时器),它们简化了线程间的协作。 异常处理在多线程编程中也至关重要...
2. **同步机制**:Java提供了多种同步工具,如synchronized关键字、Lock接口(包括ReentrantLock可重入锁)、Semaphore信号量、CountDownLatch倒计时器等。理解它们的工作原理和使用场景至关重要,因为这能防止数据...
5.5.3 信号量82 5.5.4 栅栏83 5.6 构建高效且可伸缩的结果缓存85 第二部分 结构化并发应用程序 第6章 任务执行93 6.1 在线程中执行任务93 6.1.1 串行地执行任务94 6.1.2 显式地为任务创建线程94 6.1.3 ...
书中会详细介绍各种同步工具类,如`java.util.concurrent`包下的`Semaphore`信号量、`CyclicBarrier`回环屏障、`CountDownLatch`倒计时器以及`ExecutorService`和`Future`等。这些工具提供了更高级别的同步和协作...