对象单例与多线程是否冲突
问题
在学习 spring 的时候,我思考过这么个问题:
spring 容器中,每个对象都是独一份的,服务器并发量那么大,就一个对象,够用么?会不会竞争啥的啊?
换一种问法:假设有一个函数,需要 10 分钟才能跑完,两个线程都去调用它,第二个线程要不要等 10 分钟?
解释
其实没任何经验的,就能回答这个问题:
因为上课的时候,老师说过两个线程会同时进入一个函数。
仅仅只是调用函数,在不加锁的情况下,不论函数是否是静态的,多线程都是不会出问题的,并且这种调用是同时进行和线程安全的。
测试函数
不管老师说了啥,既然想到了,就写个函数测试一下。
package com.maker.test;
class AAA{
public static void printf(){
try {
Thread.sleep(1000);
System.out.println("AAA print");
} catch (Exception e) {
e.printStackTrace();
}
}
}
class BBB{
public void printf(){
try {
Thread.sleep(1000);
System.out.println("BBB print");
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class Test2 {
public static void main(String[] args) {
{
int cnt = 10;
while(cnt --> 0){
new Thread(()->{
AAA.printf();
}).start();
}
}
{
BBB bbb = new BBB();
int cnt = 10;
while(cnt --> 0){
new Thread(()->{
bbb.printf();
}).start();
}
}
}
}
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!