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...
  • arkblue
  • arkblue
  • 2011年01月14日 14:21
  • 6733

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

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

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

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

基于SPOC的ucosii_Semaphore实验

  • 2012年10月09日 18:04
  • 7KB
  • 下载

[C#学习笔记之多线程2]多线程同步与并发访问共享资源工具—Lock、Monitor、Mutex、Semaphore

“线程同步”的含义         当一个进程启动了多个线程时,如果需要控制这些线程的推进顺序(比如A线程必须等待B和C线程执行完毕之后才能继续执行),则称这些线程需要进行“线程同步(thr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Semaphore和synchronized的差别
举报原因:
原因补充:

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