对象单例与多线程是否冲突

问题

在学习 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();
            }
        }
    }
}

posted on 2018-04-16 22:52  疯狂的妞妞  阅读(327)  评论(0编辑  收藏  举报

导航