ThreadTask

package com.tools;

public class ThreadTask implements Runnable {
    private int taskNum;
    private ExcelObject excelObject;

    public ThreadTask(int taskNum, ExcelObject excelObject) {
        this.taskNum = taskNum;
        this.excelObject = excelObject;
    }

    @SuppressWarnings("static-access")
    public void run() {
       
        try {
            System.out.println("正在执行task " + taskNum);
            //Thread.currentThread().sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //System.out.println("task " + taskNum + "执行完毕");
    }

    public int getTaskNum() {
        return taskNum;
    }

    public void setTaskNum(int taskNum) {
        this.taskNum = taskNum;
    }
}
近日灵感飙升,突发奇想,模拟操作系统调度进程的方式写了个调度函数的类库,暂称为TaskThread,此类皆组合或继承自TTaskThread类,它们是一种奇妙的类,它们可以把一个一个的现成函数当成一个“process"强行塞入TaskThread的线程运行,用户不再需要额外初始化线程类。本函数库甚至能模拟操作系统的方式对“任务函数”进行调度运行,目前的策略支持批处理和并行模式,类似OS的批处理文件运行和多任务并发执行。为了便于C++用户者使用,除了对普通函数实现了“任务化”管理之外,本类库所有任务类均实现了对C++类函数作“任务化”管理的TClassTaskThread另一系列版本。 TTaskThread类库总共包括了大大小小几十个类,提供了跨平台(目前只实现的windows)的线程、互斥等基础类,主要实现功能的类是TClassTaskThread系列类,最多带9个参数的函数或类函数的任务管理,以下是类继承关系。 以下是类继承关系图 -TThreadMutex 互斥类 -TSimpleThread 基础线程类 -TClassTaskThread 运行类函数的任务类基类 -TClassNoRetNoArgTaskThread -TClassNoRet1ArgTaskThread -TClassNoRet2ArgTaskThread ...直到支持9个参数的无返回类函数任务类 -TTaskThread 运行普通函数任务类基类 -TNoRetNoArgTaskThread -TNoRet1ArgTaskThread -TNoRet2ArgTaskThread ......直到支持9个参数的无返回函数任务类 -TMutiTaskThread9BatchFacet 批处理运行适应类 -TMutiTaskThread9ParallelFacet并行运行适应类 -TClassMutiTaskThread9BatchFacet 批处理运行适应类 (类函数) -TClassMutiTaskThread9ParallelFacet并行运行适应类 (类函数) -TMutiTaskThread9 多任务管理器类 -TClassMutiTaskThread9 多任务管理器类 (类函数) -TMutiTaskThread9<TMutiTaskThread9BatchFacet> TBatchTaskThreads批处理管理器类 -TMutiTaskThread9<TMutiTaskThread9ParallelFacet> TParallelTaskThreads并行管理器类 -TClassMutiTaskThread9<TClassMutiTaskThread9BatchFacet> TClassBatchTaskThreads批处理管理器类 (类函数) -TClassMutiTaskThread9<TClassMutiTaskThread9ParallelFacet> TClassParallelTaskThreads并行管理器类 (类函数) 源代码因为大量使用模板、类函数指针等高级的C++特性,因此需要比较新版,接近C99标准的C++编译器,笔者是使用Borland C++ 6编译通过。 以下是一个管理批处理任务的使用示例: int c=0; void AsignC() { c=a+b; } int negtive(int d) { return -d; } TBatchTaskThreads tbth9; tbth9.PushBackTaskNoRet(AsignC); tbth9.PushBackTaskRet<int,int>(negtive,112); tbth9.PushBackTaskRet<int,int>(negtive,9); tbth9.Start(); tbth9.WaitForMutiTask(); ShowMessage(IntToStr(GetTickCount()-curtime)); ShowMessage(IntToStr(c)); int testi=tbth9.GetRunedRet<int>(1); ShowMessage(IntToStr(testi)); testi=tbth9.GetRunedRet<int>(2); ShowMessage(IntToStr(testi)); tbth9.ClearTask(); 可以看出,用户只需要把待批处理运行的函数按次序塞入tbth9,然后运行Start,再WaitForMutiTask,之后就可以按照需要取回函数运行结果。可见,TBatchTaskThreads 调用方式是非常简单的。 并行方式的调用方式类似,不再赘述。 以下是完整的源代码,有兴趣者可以复制并散播,但请不要去掉文件头的版权信息,请尊重作者的精神享有权。 笔者手中还有完整的C++Builder 6的DEMO演示例程,如有兴趣,请email至superyys@163.com索取,绝不吝啬。
<think>好的,我现在需要帮助用户理解C#中进程、Thread和Task之间的区别。用户已经提供了一些相关的引用资料,我需要仔细分析这些资料,并结合自己的知识来整理出一个清晰的回答。 首先,我要回忆一下操作系统中的基本概念。进程是程序的执行实例,拥有独立的内存空间,而线程是进程内的执行单元,共享进程的资源。Task是在线程之上更高层次的抽象,通常用于异步编程。用户提供的引用提到Task是基于线程池的,能更高效地管理线程资源[^1][^2][^3]。 接下来,我需要将这三个概念分别进行对比,找出它们之间的主要区别。根据引用内容,Thread是更底层的,直接由操作系统调度,而Task由线程池管理,减少了创建和销毁的开销。进程则是更大的单位,隔离性强,但资源消耗大。 然后,我需要组织回答的结构。可能分成几个部分:基本概念、资源分配、执行方式、使用场景和优缺点。这样用户能逐步理解每个概念的特点及其差异。 要注意引用资料中的重点,比如Task提供了延续、取消、等待等功能,而Thread需要手动管理。同时,进程之间的通信机制更复杂,如管道、套接字等,而线程间可以直接共享内存。 在编写过程中,要确保使用正确的中文术语,并按照用户的要求,将行内公式用$...$格式,独立公式用$$...$$。不过在这个问题中可能数学公式较少,但如果有涉及性能分析的部分,可能需要用到,比如时间复杂度的表示。 最后,生成相关问题时要围绕这三个概念的区别和应用,比如性能对比、选择场景、通信机制等。确保问题能够帮助用户进一步深入学习。 现在需要检查是否有遗漏的信息,例如引用中提到的Task的状态管理,如未启动、运行中等,这也是与Thread的区别之一。同时,要强调Task在异步编程中的优势,如async/await模式,这也是.NET Framework发展的趋势。 总结下来,回答的结构应该是先分别介绍进程、Thread、Task,然后对比它们的资源、执行方式、控制复杂度、适用场景,最后总结如何选择。同时,加入相关的引用标注,确保信息的准确性。</think>### C# 进程、Thread与Task的区别对比 #### 1. **基本概念** - **进程**:操作系统资源分配的基本单位,拥有独立的内存空间和系统资源。例如,一个C#程序运行时对应一个进程。 - **Thread(线程)**:进程内的执行单元,共享进程的内存和资源。一个进程可包含多个线程,实现并发操作。 - **Task(任务)**:基于线程池的高级抽象,用于简化异步编程。Task通过线程池动态分配线程资源,支持取消、延续和异步等待[^1]。 #### 2. **资源分配** | 类型 | 内存隔离性 | 资源开销 | 通信机制 | |---------|---------------|----------------|--------------------------| | 进程 | 完全独立 | 高(需复制资源) | 管道、套接字、共享文件等 | | Thread | 共享进程内存 | 中等(线程上下文切换) | 直接共享内存、锁机制 | | Task | 共享进程内存 | 低(线程池复用) | 异步回调、`async/await`语法糖[^3] | #### 3. **执行与控制** - **进程**:由操作系统直接调度,启动和销毁耗时较长。 - **Thread**:手动创建和管理,需处理同步问题(如`lock`、`Monitor`)。 - **Task**:通过`Task.Run()`或`Task.Factory.StartNew()`启动,由线程池自动管理生命周期,支持链式操作(如`.ContinueWith()`)。 #### 4. **使用场景** - **进程**:需完全隔离的独立程序(如多个应用程序并行)。 - **Thread**:需要精细控制线程行为(如实时系统)。 - **Task**:I/O密集型或高并发异步操作(如Web请求、文件读写)。 #### 5. **代码示例对比** ```csharp // 进程示例 Process.Start("notepad.exe"); // Thread示例 Thread thread = new Thread(() => Console.WriteLine("Thread执行")); thread.Start(); // Task示例 Task.Run(() => Console.WriteLine("Task执行")); ``` #### 6. **总结选择建议** - 优先使用**Task**:简化异步编程,减少资源浪费。 - 慎用**Thread**:仅在需要直接控制线程时使用(如自定义堆栈大小)。 - **进程**:仅用于完全独立的程序间交互。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值