1000个用户请求进来访问controller,是不是相当于在java的main方法中new了1000个线程?

来源:4-6 遭遇面试官深度问synchronized的本质

星星之火可以燎燃

2022-05-17

比较代码一与代码二,代码一是在main方法中开了1000个线程,此时我加了锁不会有线程问题。假如代码二是放在controller中执行,此时有1000个用户请求进来,是不是也是相当于开了1000个线程去执行inc方法,还是说这1000个请求就与java中的多线程没有一点关系,是怎么解释这1000个请求?

代码一:
public class LockExample {
static Lock lock = new ReentrantLock();
private static int count = 0;

public static void inc(){
    lock.lock();//抢占锁,如果没有抢占到锁,会阻塞

// lock.tryLock()//如果没有抢占到锁,这里不会阻塞
try {
Thread.sleep(1);
count++;
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}

public static void main(String[] args) throws InterruptedException {
    for(int i = 0; i < 1000; i++){
        new Thread(()->LockExample.inc()).start();
    }
    Thread.sleep(3000);
    System.out.println("result:"+count);
}

}
代码二:
public class LockExample {
static Lock lock = new ReentrantLock();
private static int count = 0;

public static void inc(){
    try {
        Thread.sleep(1);
        count++;
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

}

写回答

1回答

求老仙

2022-05-23

不一样的,你可以google下Spring的线程模型。 每个请求肯定是独立的线程,但是并发情况下框架一般都用池化技术处理线程。因此和你自己New很多线程是不一样的。

0
2
求老仙
回复
星星之火可以燎燃
抛开Java 用户请求(网络socket连接)是文件, 响应请求是读文件, 开多少线程读文件,一个线程读多少文件,这个是web框架比如 (Spring)要处理的。
2022-05-25
共2条回复

笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

深度剖析大厂面试高频真题,让你秒变offer收割机

1783 学习 · 314 问题

查看课程