这段代码,多个请求同时进这个方法,但是锁不住线程是怎么回事,线程没排队执行,很疑惑,求大佬解答,服务器tomcatd
打印的信息:
线程线程:http-apr-8080-exec-4执行了4次循环后,其他线程就插队进来了,很疑惑,求解答
多个请求,按道理进入同一个方法每次都算一个新线程
要锁应该是同一线程进行?
把同步的东西放到代码块中,再用syn加对象锁
那应该是配置问题启动多次了,实在不行用分布式锁也能解决
是挺奇怪的,打印日志不是异步的吧
看看对象实例是否只有一个
是不是每个线程创建了自己的对象实例
class Count {
int l=0;
synchronized void printChar(char c) {
for (int i = 1; i <= 10; i++) {
System.out.println(i+":"+c);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class MyThread1 extends Thread {
Count c;
MyThread1(Count c) {
this.c = c;
}
public void run() {
c.printChar('a');
}
}
class MyThread2 extends Thread {
Count c;
MyThread2(Count c) {
this.c = c;
}
public void run() {
c.printChar('b');
}
}
public class WithSynchronization {
public static void main(String args[]) {
Count obj = new Count();// only one object
Count obj2 = new Count();// only one object
MyThread1 t1 = new MyThread1(obj);
MyThread2 t2 = new MyThread2(obj2);
t1.start();
t2.start();
}
}
1:a
1:b
2:b
2:a
3:b
3:a
4:b
4:a
5:b
5:a
6:a
6:b
7:a
7:b
8:a
8:b
9:a
9:b
10:a
10:b