多线程调用单例模式的类的同一个方法,是不是需要排队调用?

最近在研究多线程,突然想到一个问题,“多线程调用单例模式的类的同一个方法,是不是需要排队调用?”,比如有10个线程同时调用一个单例模式类的同一个方法,他们是第一个调完再轮到第二个调,还是10个线程同时可以调用这个方法?想出这种问题肯定是对java的基础知识掌握的不好,在网上找了很多帖子,但看下来都很懵懂,也发现有很多人和我有一样的问题,所以我自己写了代码,模拟这种情况,代码如下。

1.单例模式的类

public class MySingleton {
	private static MySingleton instance = new MySingleton();

	private MySingleton() {
	}

	public static MySingleton getInstance() {
		return instance;
	}

	public static void printName(String name) {
		System.out.println(name+"开始调用");
		try {
			Thread.sleep(300);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println(name+"结束调用");
	}
}

2.实现了 Runnable的类

public class NameThread implements Runnable {

	String name;
	
	public NameThread(String name) {
		this.name = name;
	}
	
	@Override
	public void run() {
		MySingleton.printName(name);
	}

}

3.测试类

	public static void main(String[] args) throws InterruptedException {
		
		Thread[] ts = new Thread[20];//同时开20个线程
		for(int i = 0 ; i < ts.length ; i++){
			NameThread m = new NameThread("thread:"+i);
			ts[i]=new Thread(m);
		}
		
		for(int i = 0 ; i < ts.length ; i++){  
			ts[i].start();
		}
		
	}

最后打印的结果:

thread:0开始调用
thread:1开始调用
thread:2开始调用
thread:3开始调用
thread:4开始调用
thread:5开始调用
thread:6开始调用
thread:8开始调用
thread:7开始调用
thread:9开始调用
thread:11开始调用
thread:10开始调用
thread:12开始调用
thread:14开始调用
thread:15开始调用
thread:13开始调用
thread:16开始调用
thread:18开始调用
thread:17开始调用
thread:19开始调用
thread:0结束调用
thread:5结束调用
thread:4结束调用
thread:3结束调用
thread:2结束调用
thread:1结束调用
thread:10结束调用
thread:11结束调用
thread:9结束调用
thread:7结束调用
thread:8结束调用
thread:6结束调用
thread:15结束调用
thread:13结束调用
thread:14结束调用
thread:12结束调用
thread:16结束调用
thread:19结束调用
thread:17结束调用
thread:18结束调用

所以,最后得出的结论就是,多线程调用单利模式类的同一个方法是不用排队的,是同时一起调用的

猜你喜欢

转载自blog.csdn.net/kouwoo/article/details/80764381