多线程编程实战(一)

简介:

为了快速处理大量的任务,多线程编程必不可少,所以最近也开始研究多线程方面的东西了。网上有不少资料可以参考,自己从实例入手,总结了一些东西,把它记录下来,方便自己日后查阅,也方便后来人。现在的编程语言,入门第一课,都是写一个Hello Word的程序。本文类似,虽说不是hello Word,但也是从最简单的多线程实例入手。

我们最常用到多线程的场景一般是这样的,有一个很大的任务需要处理,而这个大的任务有可以细分为许多的小任务(子任务),这些小任务可以采用多线程机制,并行执行。而一般来说,这个大任务所包含的小任务的个数可能不是太确定。

根据以上场景,我们对其进行归纳:

1. 一个大任务,内部包含了数量不定的子任务

2. 需要对子任务进行多线程处理

OK, 下面我们开始着手用C#实现对此实例的多线程实现。我的解决方案是:

1. 对象化大任务,在初始化大任务的实例(Instance)时,初始化(确定)子任务

2. 采用多线程,调用(Invoke)大任务的实例(Instance)中定义的处理子任务的方法

3. 多线程处理子任务时,定义一个全局的标志,记录但前处理到了哪一个,保证不重复处理子任务;

基于此方案,我们的“大任务”类如下:

clip_image002

外部多线程实现如下:

clip_image004

在Console模式下,其结果显示如下:

clip_image006

由此可见,线程3、4、5、6共4个线程一起处理了这些子任务。代码不是很复杂,只做简单说明:

1. 默认的命名空间为System.Threading, 线程相关的东西都在这个namespace下;

2. new Random((int)DateTime.Now.Ticks).Next(30, 50):初始化一个随机数的实例(instance),然后生产一个在30到50之间的随机数。这里的目的是假设我们在初始化任务实例时,不确定子任务的个数。后面还有new Random((int)DateTime.Now.Ticks).Next(100, 300),目的是架设处理子任务的时间在100到300毫秒之间不定

3. Thread th = new Thread(new ThreadStart(tester.TestOutput)); 
th.Start(); 这两句可是线程编程的核心,即初始化一个线程实例,然后开始执行!

4. Thread.CurrentThread.GetHashCode():这个可以返回线程的一个哈希值(HashCode),此例中没有实际意义,只用于区分不同的线程

5. private int flag = 0:作为一个标记使用,记录但前执行到那个子任务了。各个子线程均能够访问到。

6. public int MaxOutPut:记录总的任务数。

Console.Write(“Hello Word”) J 一个简单的多线程实例就是这么easy,当然,这只是最简单、最初步的一个实例,还有很多需要注意、优化的东西,也有一些bug,我们下文接着说。



本文转自Jack Niu博客园博客,原文链接:http://www.cnblogs.com/skywind/archive/2008/10/30/1322667.html,如需转载请自行联系原作者

相关文章
|
17天前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
104 6
|
3月前
|
Java API 微服务
为什么虚拟线程将改变Java并发编程?
为什么虚拟线程将改变Java并发编程?
277 83
|
5天前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
45 0
|
4月前
|
存储 SQL 安全
Java 无锁方式实现高性能线程实战操作指南
本文深入探讨了现代高并发Java应用中单例模式的实现方式,分析了传统单例(如DCL)的局限性,并提出了多种无锁实现方案。包括基于ThreadLocal的延迟初始化、VarHandle原子操作、Record不可变对象、响应式编程(Reactor)以及CDI依赖注入等实现方式。每种方案均附有代码示例及适用场景,同时通过JMH性能测试对比各实现的优劣。最后,结合实际案例设计了一个高性能配置中心,展示了无锁单例在实际开发中的应用。总结中提出根据场景选择合适的实现方式,并遵循现代单例设计原则以优化性能和安全性。文中还提供了代码获取链接,便于读者实践与学习。
109 0
|
1月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
144 16
|
5月前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
211 0
|
5月前
|
设计模式 运维 监控
并发设计模式实战系列(4):线程池
需要建立持续的性能剖析(Profiling)和调优机制。通过以上十二个维度的系统化扩展,构建了一个从。设置合理队列容量/拒绝策略。动态扩容/优化任务处理速度。检查线程栈定位热点代码。调整最大用户进程数限制。CPU占用率100%
374 0
|
2月前
|
数据采集 消息中间件 并行计算
Python多线程与多进程性能对比:从原理到实战的深度解析
在Python编程中,多线程与多进程是提升并发性能的关键手段。本文通过实验数据、代码示例和通俗比喻,深入解析两者在不同任务类型下的性能表现,帮助开发者科学选择并发策略,优化程序效率。
179 1

热门文章

最新文章