多线程调用单例模式的类的同一个方法,是不是需要排队调用?
程序员文章站
2024-01-26 08:19:40
...
最近在研究多线程,突然想到一个问题,“多线程调用单例模式的类的同一个方法,是不是需要排队调用?”,比如有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结束调用
所以,最后得出的结论就是,多线程调用单利模式类的同一个方法是不用排队的,是同时一起调用的
上一篇: 前端入门——CSS基础
下一篇: 二叉树广度优先遍历(层次遍历)