社区
C#
帖子详情
线程问题
sunny906
2010-01-26 03:13:06
有三个不同的线程:A、B、C和一个实例化对象的方法:void InitObject();
这三个线程是同时执行的,顺序分别为C、A、B
每个线程执行的时候都要调用InitObject(),即每个线程都会实例化同一个对象,而且实例化的结果都是一样的
但我只想实例化一次,并且这三个线程必须都执行
请问有什么方法可以实现?有没有可能把这三个线程合并成一个,让合并后的线程去调用InitObject()?
...全文
173
21
打赏
收藏
线程问题
有三个不同的线程:A、B、C和一个实例化对象的方法:void InitObject(); 这三个线程是同时执行的,顺序分别为C、A、B 每个线程执行的时候都要调用InitObject(),即每个线程都会实例化同一个对象,而且实例化的结果都是一样的 但我只想实例化一次,并且这三个线程必须都执行 请问有什么方法可以实现?有没有可能把这三个线程合并成一个,让合并后的线程去调用InitObject()?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunny906
2010-01-27
打赏
举报
回复
用单例模式后,对象保证了一个,但是方法还是被执行了多次
怎么样才能使方法也只被执行一次?
请教各位!
whitechololate
2010-01-27
打赏
举报
回复
单例模式,搜一下,很多的
sunny906
2010-01-27
打赏
举报
回复
顶
RFEZGC
2010-01-26
打赏
举报
回复
每日回帖
cqzs632
2010-01-26
打赏
举报
回复
帮顶~~呵呵
sunny906
2010-01-26
打赏
举报
回复
顶
sunny906
2010-01-26
打赏
举报
回复
再顶
sunny906
2010-01-26
打赏
举报
回复
顶一下
能不能两个线程只输出1、2、3、4、5
流氓兔
2010-01-26
打赏
举报
回复
[Quote=引用 4 楼 lianshaohua 的回复:]
引用楼主 sunny906 的回复:
有三个不同的线程:A、B、C和一个实例化对象的方法:void InitObject();
这三个线程是同时执行的,顺序分别为C、A、B
每个线程执行的时候都要调用InitObject(),即每个线程都会实例化同一个对象,而且实例化的结果都是一样的
但我只想实例化一次,并且这三个线程必须都执行
请问有什么方法可以实现?有没有可能把这三个线程合并成一个,让合并后的线程去调用InitObject()?
1、线程的执行顺序是不确定的,除非你自己硬性控制了,
2、用单例模式吧,但三个线程如果都要修改对象的话,要加锁,即:先lock(对象)再访问
[/Quote]
顶
sunny906
2010-01-26
打赏
举报
回复
在“
逍遥剑客的专栏 - CSDN博客
”里看到的一个例子:
public sealed class Singleton
{
Singleton()
{
}
public static Singleton Instance
{
get
{
return Nested.instance;
}
}
class Nested
{
internal static readonly Singleton instance;
static Nested()
{
instance = new Singleton();
}
}
private int num = 0;
/**//// <summary>
/// 增加
/// </summary>
public void Add()
{
num++;
Console.WriteLine("输出:" + num);
}
}
//--------------------------------------------------------------
class Program
{
public static void Print()
{
Singleton singleton = Singleton.Instance;
lock (singleton)
{
for (int i = 0; i < 5; i++)
{
singleton.Add();
}
}
}
static void Main(string[] args)
{
Thread threadFst = new Thread(new ThreadStart(Print));
threadFst.Name = "Fst";
Thread threadScd = new Thread(new ThreadStart(Print));
threadScd.Name = "Scd";
threadFst.Start();
threadScd.Start();
Console.ReadLine();
}
}
这段代码执行过后,输出的是1、2、3、4、5、6、7、8、9、10
单件模式不是在第一次使用这个对象的时候才对这个对象进行初始化吗?可为什么两个线程都执行了输出操作?
不太明白,请教各位
sunny906
2010-01-26
打赏
举报
回复
谢谢各位,我先看看
成都锦福工作室
2010-01-26
打赏
举报
回复
使用单例吧,提供全局访问点,大致代码如下:
Class SingletonClass
{
private static volatile SingletonClass sc;
private static object syncLock = new object();
Public static SingletonClass GetSc()
{
if (sc == null)
{
lock (syncLock)
{
if (sc == null)
{
sc = new SingletonClass();
}
}
}
return sc;
}
}
阿非
2010-01-26
打赏
举报
回复
http://www.yoda.arachsys.com/csharp/singleton.html
wwwwpig
2010-01-26
打赏
举报
回复
参考一下吧
using System;
namespace SigletonPattern.Sigleton
{
/**//// <summary>
/// 功能:在C#用双重锁定实现单件模式
/// 编写:Terrylee
/// 日期:2005年12月06日
/// </summary>
public class DoubLockSigleton
{
//volatile 表示编译器不能自动优化调试语句.(避免调整语句位置和顺序导致初始化时间点不正确.sky)
private static volatile DoubLockSigleton instance;
/**//// <summary>
/// 辅助锁对象,本身没有意义
/// </summary>
private static object syncRoot = new Object();
/**//// <summary>
/// 构造方法改为Private
/// </summary>
private DoubLockSigleton()
{
}
public static DoubLockSigleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new DoubLockSigleton();
}
}
return instance;
}
}
}
}
nicetfox
2010-01-26
打赏
举报
回复
有没有实例
sunny906
2010-01-26
打赏
举报
回复
没用过单例模式,能不能通俗地解释一下
谢谢
sunny906
2010-01-26
打赏
举报
回复
能不能Example一下,谢谢!
ztenv
2010-01-26
打赏
举报
回复
[Quote=引用楼主 sunny906 的回复:]
有三个不同的线程:A、B、C和一个实例化对象的方法:void InitObject();
这三个线程是同时执行的,顺序分别为C、A、B
每个线程执行的时候都要调用InitObject(),即每个线程都会实例化同一个对象,而且实例化的结果都是一样的
但我只想实例化一次,并且这三个线程必须都执行
请问有什么方法可以实现?有没有可能把这三个线程合并成一个,让合并后的线程去调用InitObject()?
[/Quote]
1、线程的执行顺序是不确定的,除非你自己硬性控制了,
2、用单例模式吧,但三个线程如果都要修改对象的话,要加锁,即:先lock(对象)再访问
白头老汉
2010-01-26
打赏
举报
回复
把构造函数写成静态的不就可以了么?
辉太郎
2010-01-26
打赏
举报
回复
设计模式中的单件模式可以解决你的这个问题,只对同一个对象实例化一遍,保证只有一个对象的实例!
加载更多回复(1)
Android应用程序消息处理机制
Android应用程序与传统的PC应用程序一样,都是消息驱动的。也就是说,在Android应用程序主
线程
中,所有函数都是在一个消息循环中执行的。Android应用程序其它
线程
,也可以像主
线程
一样,拥有消息循环。Android应用程序主
线程
是一个特殊的
线程
,因为它同时也是UI
线程
以及触摸屏、键盘等输入事件处理
线程
。主
线程
对消息循环很敏感,一旦发生阻塞,就会影响UI的流畅度,甚至发生ANR
问题
。这个PPT讲Android应用程序
线程
消息循环原理,主要涉及到Handler和Looper两个类,以及根据消息循环的不同使用场景,总结出三种
线程
使用模型。掌握Android应用程序消息处理机制,有助于我们熟练地使用同步和异步编程,提高程序的运行性能
Matplotlib多
线程
问题
Matplotlib多
线程
画图遇到的BUG 1.
问题
: 多
线程
处理算法后,对结果进行图示,出现BUG:消息里的图和文字全部错乱,仅有几组可视化图像正确。 多
线程
采用import threading库。 2.可能原因: 引入的 import matplotlib.pyplot as plt 是个全局变量,应该就是它引起的
线程
不安全。 3.解决办法: 觉得
线程
不安全,那就加锁 from threading import Lock, RLock lock = Lock() rlock = RLock() 在pl
JAVA多
线程
精讲下
线程
的同步(
线程
安全
问题
)l
线程
的死锁l
线程
间通信l
线程
组l
线程
池l 多
线程
的第三种实现方案l 匿名内部类方式使用多
线程
l 定时器的使用l 多
线程
面试题
SkyWalking8.4监控跨
线程
问题
解决
SkyWalking8.x监控异步跨
线程
问题
一. 异步多
线程
问题
添加依赖开启异步多
线程
测试类方法Controller层处理分析二. 指定跟踪上下文的K-V制作不易,求一个点赞+关注~~ 一. 异步多
线程
问题
首先,Skywalking是一款基于java代理的监控系统,但是在监控多
线程
跨
线程
的时候却会意外失联,这就让我们没办法去追踪调用链路
问题
类似于下图 @GetMapping("/task1") public CommonReturnType task1() throws Exception
Java多
线程
问题
总结
Java多
线程
问题
总结 http://www.importnew.com/18459.html#comment-651217 多
线程
有什么用? (1)发挥多核CPU的优势 单核CPU上所谓的”多
线程
”那是假的多
线程
,同一时间处理器只会处理一段逻辑,只不过
线程
之间切换得比较快,看着像多个
线程
”同时”运行罢了。多核CPU上的多
线程
才是真正的多
线程
,它能让你的多段逻辑同时工作,多
线程
,可以真正发挥出...
C#
110,535
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章