1 使用synchronized关键字,保证在同一时刻只能有一个线程进入方法或代码块。

1.1在方法声明中使用synchronized。

public synchronized void processData1()
{
	//do something here	
}
public synchronized void processData2()
{
	//do something here	
}

同一个类中若有多个方法都使用了synchronized关键字,则该类的同一个实例(即对象)中这些方法为互斥关系。

1.2在代码块中使用synchronized。

public void getData()
{
	//synchronized修饰的是多个线程间的共享对象,在此仅以this为例。
	synchronized(this){
		//do something here
	}
}

 

2 使用volatile关键字,使变量具有原子性。

仅限于变量的值的修改不依赖原来的值时,比如:i++,n=n+8,即属于依赖原来的值。

public volatile int n = 0;

 

3 使用信号量Semaphore。

Semaphore可以限制某个资源同时被访问的数量。

//限制可同时被5个客户端访问
private Semaphore sp = new Semaphore(5);

访问时获取许可:

sp.acquire();

访问后释放许可:

sp.release();

如果限制为仅1个客户端访问,那么Semaphore对象可以实现互斥锁功能。