当前位置: 技术问答>java相关
多线程的同步问题
来源: 互联网 发布时间:2015-01-01
本文导语: 有一个包含多个静态方法的类,在一个多线程的程序中,多个线程都有可能调用该类的某个静态方法。 能否保证同一时刻只有一个静态方法被调用,而且被调用的静态方法完成后,另一个调用静态方法的...
有一个包含多个静态方法的类,在一个多线程的程序中,多个线程都有可能调用该类的某个静态方法。
能否保证同一时刻只有一个静态方法被调用,而且被调用的静态方法完成后,另一个调用静态方法的请求才能被响应?
能否保证同一时刻只有一个静态方法被调用,而且被调用的静态方法完成后,另一个调用静态方法的请求才能被响应?
|
我这样想的,不知能不能达到你的要求
//abc.java
class SyncObject {
private static boolean flag = false;
public static void setFlag(boolean flag) {
this.flag = flag;
}
public static boolean getFlag() {
return flag
}
}
public class abc {
public static final SyncObject syncObject;
public static void methodA() {
//在方法头同步syncObject,检查
if(syncObject.getFlag()) {
synchronized(syncObject) {
syncObject.wait();
syncObject(true);
}
} else {
synchronized(syncObject) {
syncObject(true);
}
}
//在这里写你的方法内容
.....
synchronized(syncObject) {
syncObject.setFlag(false);
syncObject.notify();
}
}
}
//abc.java
class SyncObject {
private static boolean flag = false;
public static void setFlag(boolean flag) {
this.flag = flag;
}
public static boolean getFlag() {
return flag
}
}
public class abc {
public static final SyncObject syncObject;
public static void methodA() {
//在方法头同步syncObject,检查
if(syncObject.getFlag()) {
synchronized(syncObject) {
syncObject.wait();
syncObject(true);
}
} else {
synchronized(syncObject) {
syncObject(true);
}
}
//在这里写你的方法内容
.....
synchronized(syncObject) {
syncObject.setFlag(false);
syncObject.notify();
}
}
}
|
用volatile类型变量可以保证该变量只会任意时刻只被一个函数调用。
然后把该变量设为flag就可以了。
然后把该变量设为flag就可以了。
|
我想你弄错我的意思了,我并不是要用flag来控制,而是通过同步访问某一个方法(这里假设为test.getflag()这个方法)来控制。
这么说吧,在多线程类中,所有在访问test类的静态方法时,先要同步做一个访问某一个其他的方法的操作,通过这个瓶颈控制其他静态方法的访问。
不知说的是否清楚。
这么说吧,在多线程类中,所有在访问test类的静态方法时,先要同步做一个访问某一个其他的方法的操作,通过这个瓶颈控制其他静态方法的访问。
不知说的是否清楚。