多线程调用单例模式的类的同一个方法,是不是需要排队调用? 您所在的位置:网站首页 写出一个单例模式的方法 多线程调用单例模式的类的同一个方法,是不是需要排队调用?

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

2024-07-16 11:02| 来源: 网络整理| 查看: 265

最近在研究多线程,突然想到一个问题,“多线程调用单例模式的类的同一个方法,是不是需要排队调用?”,比如有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结束调用

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有