package concurrent.lock;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
/**
* 信号灯
* 只有拿到信号灯的线程才能执行,没拿到信号灯的要等待
*
*/
public class SemaphoreTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final Semaphore sp = new Semaphore(3);
for(int i=0;i<10;i++){
Runnable runnable = new Runnable(){
public void run(){
try {
sp.acquire();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("线程" + Thread.currentThread().getName() +
"进入,当前已有" + (3-sp.availablePermits()) + "个并发");
try {
Thread.sleep((long)(Math.random()*10000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程" + Thread.currentThread().getName() +
"即将离开");
sp.release();
//下面代码有时候执行不准确,因为其没有和上面的代码合成原子单元
System.out.println("线程" + Thread.currentThread().getName() +
"已离开,当前已有" + (3-sp.availablePermits()) + "个并发");
}
};
service.execute(runnable);
}
}
}
分享到:
相关推荐
此外,还探讨了如何使用 semaphore 实现进程间的同步与互斥,通过实例解析展示了经典的多线程和进程间通讯问题,如生产者消费者模型、信号灯的应用场景及解决办法。 适合人群:对于有一定Linux系统操作基础的学生...
Java提供了多种同步工具,如synchronized关键字、Semaphore(信号量)等,可以用来模拟交通信号灯的效果。例如,Semaphore可以限制同时访问筷子的数量,从而防止所有哲学家同时拿起筷子造成死锁。 项目的实现通常...
信号灯(Semaphore)是一种同步原语,用于解决多个进程或线程对共享资源的竞争问题。信号灯分为二进制信号灯和计数信号灯两种。 **4.2 Linux信号灯** Linux支持多种类型的信号灯,包括System V信号灯和POSIX信号灯...
10. **拓展性**:考虑项目的未来扩展,比如增加人行横道信号、自适应交通流量的智能控制等功能,设计时应保持代码的模块化和灵活性。 通过以上步骤,我们可以构建出一个功能完备的十字路口红绿灯模拟系统。在实践中...
在Java中,`java.util.concurrent.Semaphore`类提供了信号灯功能,允许指定数量的线程同时访问特定资源,超过限制则等待。 4. **定时调度**:Java提供了`java.util.Timer`和`java.util.concurrent....
在Java编程语言中,我们可以利用多线程技术来模拟现实世界中的交通信号灯控制系统,即红绿灯。这个程序的设计可以让我们深入理解并发编程的概念,以及如何在Java中实现线程间的协调与通信。 首先,我们需要了解红...
信号量分为互斥量(Mutex)和信号灯(Semaphore),互斥量用于保护临界区,确保同一时刻只有一个进程访问,而信号灯则能控制多个资源的并发访问。 最后,**共享内存**(Shared Memory)是进程间通信最快的方式,...
在Rsemaforos1项目中,可能会用到`Semaphore`来模拟信号灯的切换,限制同时通行的线程数量,确保交通流量的控制。 4. **设计模式** 项目可能采用了观察者模式(Observer Pattern),使得信号灯状态的改变能够通知...
信号量有两种类型:互斥量(Mutex)和信号灯(Semaphore),互斥量用于保护临界区,防止资源竞争,而信号灯则可以管理多个资源。 5. **共享内存**:共享内存允许不同进程直接读写同一块内存区域,效率较高。为了...
信号灯(Semaphore)则是控制进程同步和互斥的一种方法,它允许进程等待特定条件满足后再继续执行。 三、文件与I/O操作 UNIX系统中的文件系统是其强大功能的核心之一。书中讲解了文件的打开、关闭、读写操作,以及...
在VxWorks中,应用程序通常由任务(Task)、中断服务程序(ISR)、信号量(Semaphore)、消息队列(Message Queue)、信号灯(Mutex)等核心组件构成。通过这些组件,开发者可以构建出高效并发运行的系统。 实验...
**信号灯(Semaphore)**:信号灯是一种更复杂的同步工具,可以控制多个线程对资源的访问数量。它有一个整数值,线程每次获取资源时会尝试减一,如果值为0,则线程会被阻塞;当有线程释放资源时,信号量的值会加一,...
8. **Semaphore**:信号灯,可以控制同时访问特定资源的线程数量,与互斥量类似,但更灵活,可以控制多个线程同时访问。 在实际编程中,选择哪种同步机制取决于具体的需求。例如,如果需要确保某个资源只被一个线程...
例如,`AutoResetEvent`可以作为一个信号灯,当事件发生时,它会允许一个等待的线程继续执行,然后自动重置,阻止其他线程。这种方式常用于实现生产者-消费者模式或其他同步场景。 标签"C#"表明我们关注的是C#语言...
RTOS通常包括一些基本的内核对象,如任务(Task)、信号灯(Semaphore)、消息队列(Message Queue)等。任务是RTOS中最小的可调度单位,负责执行特定的代码序列。信号灯常用来进行任务之间的同步,而消息队列则用于...
#### 应用实例分析 为了更深入地理解PV原语的工作原理及其在实际应用中的作用,下面将通过几个具体的案例来探讨PV原语是如何帮助实现进程间的互斥与同步的。 ##### 例1:两个进程共享一个资源 假设存在两个进程A...
#### 1.13 信号量(Semaphore)使用示例 在操作系统中,信号量是一种常用的进程同步机制,用于解决进程间的互斥问题。例如,代码片段中通过信号量`mutex`控制对共享变量`N`的访问,确保任何时候只有一个进程能够...
在操作系统中,这通常通过信号量(Semaphore)或者互斥锁(Mutex)来实现。我们可以为每个方向设置一个信号量,初始值为0,表示红灯。当绿灯亮起,信号量加1,表示车辆可以通行;红灯亮起时,信号量减1,表示车辆需...
- **信号灯(Semaphore)**:用于控制对有限资源的访问,允许指定数量的线程同时访问资源。 #### 实例演示 为了进一步说明Delphi中多线程技术的实际应用,我们可以通过一个简单的示例来演示如何创建和管理线程。...
`Semaphore`可以作为信号灯,控制对共享资源的访问数量。`CyclicBarrier`是一个同步点,允许多个线程等待彼此到达后再一起继续执行。`CountDownLatch`可以让一个线程等待其他线程完成操作,而`Exchanger`则允许两个...