请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

比较代码一与代码二,代码一是在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();
    }
}

}

正在回答 回答被采纳积分+3

1回答

求老仙 2022-05-23 09:43:07

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

0 回复 有任何疑惑可以回复我~
  • 我可能没描述清楚,我想问的是,用户的请求是不是也是线程?
    回复 有任何疑惑可以回复我~ 2022-05-24 09:56:47
  • 求老仙 回复 提问者 星星之火可以燎燃 #2
    抛开Java 用户请求(网络socket连接)是文件, 响应请求是读文件, 开多少线程读文件,一个线程读多少文件,这个是web框架比如 (Spring)要处理的。
    回复 有任何疑惑可以回复我~ 2022-05-25 11:49:02
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信