多线程编程实战(一)

简介:

为了快速处理大量的任务,多线程编程必不可少,所以最近也开始研究多线程方面的东西了。网上有不少资料可以参考,自己从实例入手,总结了一些东西,把它记录下来,方便自己日后查阅,也方便后来人。现在的编程语言,入门第一课,都是写一个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,如需转载请自行联系原作者

相关文章
|
5天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
19 2
|
13天前
|
Java
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
22 7
|
10天前
|
Java 调度 开发者
Java中的多线程编程:从基础到实践
本文旨在深入探讨Java多线程编程的核心概念和实际应用,通过浅显易懂的语言解释多线程的基本原理,并结合实例展示如何在Java中创建、控制和管理线程。我们将从简单的线程创建开始,逐步深入到线程同步、通信以及死锁问题的解决方案,最终通过具体的代码示例来加深理解。无论您是Java初学者还是希望提升多线程编程技能的开发者,本文都将为您提供有价值的见解和实用的技巧。
15 2
|
14天前
|
Java Android开发 UED
🧠Android多线程与异步编程实战!告别卡顿,让应用响应如丝般顺滑!🧵
在Android开发中,为应对复杂应用场景和繁重计算任务,多线程与异步编程成为保证UI流畅性的关键。本文将介绍Android中的多线程基础,包括Thread、Handler、Looper、AsyncTask及ExecutorService等,并通过示例代码展示其实用性。AsyncTask适用于简单后台操作,而ExecutorService则能更好地管理复杂并发任务。合理运用这些技术,可显著提升应用性能和用户体验,避免内存泄漏和线程安全问题,确保UI更新顺畅。
36 5
|
12天前
|
Java 数据处理
Java中的多线程编程:从基础到实践
本文旨在深入探讨Java中的多线程编程,涵盖其基本概念、创建方法、同步机制及实际应用。通过对多线程基础知识的介绍和具体示例的演示,希望帮助读者更好地理解和应用Java多线程编程,提高程序的效率和性能。
19 1
|
5天前
|
Java 数据中心 微服务
Java高级知识:线程池隔离与信号量隔离的实战应用
在Java并发编程中,线程池隔离与信号量隔离是两种常用的资源隔离技术,它们在提高系统稳定性、防止系统过载方面发挥着重要作用。
6 0
|
5天前
|
Java
COMATE插件实现使用线程池高级并发模型简化多线程编程
本文介绍了COMATE插件的使用,该插件通过线程池实现高级并发模型,简化了多线程编程的过程,并提供了生成结果和代码参考。
|
7天前
|
Java 数据处理 调度
Java中的多线程编程:从基础到实践
本文深入探讨了Java中多线程编程的基本概念、实现方式及其在实际项目中的应用。首先,我们将了解什么是线程以及为何需要多线程编程。接着,文章将详细介绍如何在Java中创建和管理线程,包括继承Thread类、实现Runnable接口以及使用Executor框架等方法。此外,我们还将讨论线程同步和通信的问题,如互斥锁、信号量、条件变量等。最后,通过具体的示例展示了如何在实际项目中有效地利用多线程提高程序的性能和响应能力。
|
8天前
|
安全 算法 Java
Java中的多线程编程:从基础到高级应用
本文深入探讨了Java中的多线程编程,从最基础的概念入手,逐步引导读者了解并掌握多线程开发的核心技术。无论是初学者还是有一定经验的开发者,都能从中获益。通过实例和代码示例,本文详细讲解了线程的创建与管理、同步与锁机制、线程间通信以及高级并发工具等主题。此外,还讨论了多线程编程中常见的问题及其解决方案,帮助读者编写出高效、安全的多线程应用程序。
|
9天前
|
安全 Java 调度
python3多线程实战(python3经典编程案例)
该文章提供了Python3中多线程的应用实例,展示了如何利用Python的threading模块来创建和管理线程,以实现并发执行任务。
12 0