Semaphore和synchronized的差别

翻译 2012年03月28日 22:46:35

Semaphore和synchronized最主要的差别是Semaphore可以指定多个并发,而synchronized只能是一个!

 

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);			
		}
	}

}


 

相关文章推荐

spinlock和semaphore的差别和应用

转自 http://group.ednchina.com/1036/18550.aspx   这两天经常有同事在问我spinlock和semaphore的相关问题,什么时候该用spinlock?什么时...

Java三种锁机制初步分析总结(Synchronized Lock(ReentrantLock) Semaphore Atomic)

Java处理高并发,大数据,多线程,分布式这些都会产生一个严重的后果,如何保证线程安全和数据的一致性成为重中之重。为了实现这点就不得不使用到了锁机制,java提供了4种常见的锁机制,当然其中Synch...

比较ReentrantLock和synchronized和信号量Semaphore实现的同步性能

为了比较一下ReentrantLock和synchronized的性能,做了一下性能测试: public class ReentreLockTest { private static long...

比较ReentrantLock和synchronized和信号量Semaphore实现的同步性能

比较ReentrantLock和synchronized和信号量Semaphore实现的同步性能 得出结论: (1)使用Lock的性能比使用synchronized关键字要提高4~5倍; (...

IOS线程数据篇4之线程之间的同步:synchronized NSlock pthread_mutex_t dispatch_semaphore_create

先来看一个经典的案例:卖票

java多线程并发(一)Semaphore,volatile,synchronized ,Lock, CyclicBarrier和CountDownLatch

在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。我们先看具体看一下这三个概念:1.原子性  原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,...

一心多用多线程-阻塞队列(6)-Semaphore

六、有序的排队进场-Semaphore 在现实中我们会经常遇到排队进场的一种情况,一家餐厅能容纳的最多人数是固定的,假设是4人,那么如果来了20个人的话最多也就进去四个人吃,一个吃完了走另外一个人进...
  • hayre
  • hayre
  • 2016-11-04 21:10
  • 179
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)