多程程就涉及到资源共享管理问题,基本上同一时刻不能共享的数据都采用锁机制来实现。java中提供语言级的支持:Synchronized。有二种用法:
用方法的修饰中
package practisejava.others.Lock;
/**
* java同步的一种方法,采用synchronized关键字,实现用时就是放该关键字到实例方法或类方法前面,
* 表示该方法是同步的,同一时间只能有一个线程使用它
*/
public class SynchronizedMethod {
int count;
// synchronized用到实例方法中
synchronized void bump() {
count++;
}
static int classCount;
// synchronized用到类方法中
static synchronized void classBump() {
classCount++;
}
}
用作同步块中
package practisejava.others.Lock;
/**
* java同步的一种方法,采用synchronized块,使用主义如下:
* synchronized ( Expression ) Block
* 其中Expression为引用类型
*/
public class SynchronizedStatement {
int count;
void bump() {
synchronized (this) {
count++;
}
}
static int classCount;
static void classBump() {
synchronized (SynchronizedStatement.class) {
classCount++;
}
}
}
用在方法前做为修钸词和用到statement块的差别在于:前者是在运行时实现锁功能,后者在编译时生成的class文件中体现锁机制。