一个servlet 有一个同步方法或者同步块,两个子类servlet多线程调用或者访问时,子类servlet之间能起到同步 or 阻塞等待的作业么?
[quote]调用此父类的同步块或者同步方法时不知道能实现需要么?同步有效么?[/quote]
能实现需要。有效。 举个例子说明:
[code="java"]
class A {
private static final Object lock = new Object();
protected void asyn(String name) {
System.out.println(name + "进入了");
sleep();
System.out.println(name + "出去了");
}
protected void sync(String name) {
synchronized (lock) {
System.out.println(name + "进入了");
sleep();
System.out.println(name + "出去了");
}
}
private void sleep() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Asyn extends A implements Runnable {
private String name;
public Asyn(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
asyn(name);
}
}
}
class Sync extends A implements Runnable {
private String name;
public Sync(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
sync(name);
}
}
}
public class Test {
public static void main(String[] args) {
// 同步,可以看到只会有一个人进入,他出去之后另外的人才能进入
Thread t1 = new Thread(new Sync("rod"));
Thread t2 = new Thread(new Sync("bob"));
t1.start();
t2.start();
// 异步,可以看到会有多个人进入
// Thread t3 = new Thread(new Asyn("rod"));
// Thread t4 = new Thread(new Asyn("bob"));
// t3.start();
// t4.start();
}
}
[/code]
可以. 只要你是调用超类那个synchronized方法或块。
你确定每个servlet的classloader是一样的么?
不一样的话,synchronized没有用
什么叫做子类的servlet?
你的web.xml如何配置的,贴上来看看
好吧,我给你贴个url,保证解决问题。
[url]http://aguang520.iteye.com/blog/805393[/url]
ps:就不能多用用搜索引擎么,百度可不是光用来搜迅雷小电影的。hoho