`
tubaluer
  • 浏览: 1499771 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

使用Thread包装类进行多线程操作

 
阅读更多

Java中使用接口的方式,实现方法的回调机制。而在.NET里,我们通过代理,能够很轻松的实现方法的回调。

class Class1
{

[STAThread]
static void Main(string[] args)
{
Class1 c = new Class1();
ThreadWrapper tw = new ThreadWrapper(new Callback(c.PrintResult), 100);
// 线程开始
tw.Start();
Console.ReadLine();
}

// 打印结果,用于回调
public void PrintResult(int result)
{
Console.WriteLine("Result: " + result.ToString());
}
}

// 回调代理
public delegate void Callback(int n);

class ThreadWrapper
{
public readonly Thread mThread;

private Callback callback;

private int n;

// 参数1:用于回调的代理
// 参数2:需要计算的值

public ThreadWrapper(Callback callback, int arg)
{
this.callback = callback;
ThreadStart myThreadDelegate = new ThreadStart(this.Run);
this.mThread = new Thread(myThreadDelegate);
this.n = arg;
}

// 线程的对外接口
public void Start()
{
this.mThread.Start();
}

// 需要在线程里调用的方法
public void Run()
{
int result = this.Caculate(this.n);
callback(result);
}

private int Caculate(int n)
{
return n*100;
}
}

分享到:
评论

相关推荐

    C++多线程封装成类使用示例

    本示例将详细介绍如何将C++的多线程功能封装成一个类,以便在实际项目中更加灵活地使用。 首先,我们需要了解C++11中的`std::thread`类。`std::thread`允许我们创建和管理线程。创建一个新线程的基本步骤包括声明一...

    sqlite数据库c++类封装,及源码实例,boost多线程

    接下来,让我们深入探讨如何使用Boost库进行多线程操作。Boost库是C++的一个扩展库,提供了大量高质量的工具和库,其中就包括了线程管理。在SQLite数据库操作中使用多线程,可以提高并发性能,尤其是在处理大量并发...

    多线程操作实例源码

    本实例源码主要聚焦于多线程操作,旨在通过具体的代码示例来帮助开发者理解和掌握多线程的使用。 在Java等支持多线程的编程语言中,创建和管理线程主要有以下几种方式: 1. 继承Thread类:这是最基础的创建线程的...

    c# 多线程安全包装小例子

    在"线程安全包装器"这个示例中,可能包含一个自定义的包装类,该类内部维护了一个非线程安全的原始对象,并通过使用上述的同步机制(如Mutex、Monitor等)来确保对这个对象的所有操作都是线程安全的。这样的设计可以...

    Java使用Callable和Future创建线程操作示例

    Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...

    Java多线程.pdf

    Java多线程的实现方式主要有三种:继承Thread类、实现Runnable接口以及实现Callable接口。 1. 继承Thread类: 当自定义类继承Thread类时,需要重写run()方法来定义线程的行为。然后通过创建Thread子类的对象并调用...

    VB.NET多线程编程的详细说明(完整版)[定义].pdf

    在VB.NET中,可以使用System.Threading命名空间中的Thread类来实现多线程编程。 Thread类提供了创建、启动和管理线程的方法。 * 建立线程:可以使用Thread类的构造函数来建立一个新的线程,并使用AddressOf语句将要...

    Java多线程的总结

    Java集合框架中有一些线程安全的类,如Vector、HashTable、ConcurrentHashMap等,它们内部实现了同步机制,可以在多线程环境中直接使用,避免了手动同步的复杂性。 十、线程局部变量 ThreadLocal为每个线程都创建了...

    多线程,多线程面试题,C#

    在`后台操作.sln`和`后台操作.suo`文件中,很可能是包含了一个C#项目,项目可能实现了多线程的后台操作。这可能涉及到数据库操作、文件处理、网络请求等场景,通过多线程提高程序响应速度。例如,一个后台任务可能...

    c# 多线程 异步进度条

    在执行长时间运行的任务时,如大数据处理、网络下载或I/O密集型操作,使用多线程可以避免阻塞主线程,使用户界面(UI)保持响应。而异步操作进一步优化了这一过程,允许程序在等待任务完成的同时执行其他工作。 ...

    c#多线程学习实例,让你通过简洁的程序,而达到多线程的核心。

    除了直接使用`Thread`类,C#还提供了其他更高级的多线程机制,如`Task`和`ThreadPool`。`Task`是异步编程的基础,通常用于执行计算密集型任务,而`ThreadPool`则是一个线程池,用于高效管理线程资源。 任务(Task)的...

    Android Thread线程动态操作UI的Demo

    异步编程库,通过 observable-stream 模式简化了多线程间的复杂交互,支持链式调用和灵活的数据处理。 9. ThreadPoolExecutor: 如果需要自定义线程池执行任务,可以使用ThreadPoolExecutor,它可以管理多个工作...

    unity 多线程

    3. **Dispatcher.cs**:通常,Dispatcher类用于管理线程间的通信,它可能包含了一个消息队列,将非主线程中的任务包装成消息,然后在主线程的合适时机(如Update回调)进行处理。 4. **Task.cs**:这可能是.NET ...

    java多线程面试题59题集合

    - 实现Callable接口:创建一个实现了Callable接口的类,实现call()方法,通过FutureTask包装Callable对象并传给Thread。 2. **线程状态** - 新建(New):线程被创建但尚未启动。 - 运行(Runnable):线程已...

    java多线程、锁的教程跟案例

    `多线程.docx`可能是关于Java多线程的深入讲解,涵盖线程安全、线程同步、锁的使用等方面。 总之,理解并熟练掌握Java多线程和锁机制对于编写高效、健壮的并发代码至关重要。通过实践和案例学习,可以更好地理解...

    多线程笔记.docx

    继承Thread类实现多线程时,需要注意start()方法和run()方法的区别。start()方法会启动新线程,使得线程进入就绪状态,然后由JVM调度执行run()方法,而直接调用run()方法则是在当前线程中顺序执行,不会创建新线程。...

    多线程的运用

    而多线程可以让CPU在等待I/O操作完成的同时切换到其他线程,进行其他任务的处理,从而实现并发执行,提高了系统的响应速度和用户体验。 多线程的实现主要有以下几种方式: 1. 继承Thread类:在Java中,可以通过...

    2020面试题总结多线程篇.pdf

    多线程实现方式主要有四种:继承 Thread 类、实现 Runable 接口、实现 Callable 接口、通过 FutureTask 包装器。这四种方式可以满足不同的需求,例如继承 Thread 类可以实现线程的生命周期管理,而实现 Runable 接口...

    应用mfc进行windows多线程编程

    为了避免多线程环境下的数据竞争问题,使用`InterlockedIncrement`函数来确保变量加1的操作不会被其他线程打断。另一种方法是在变量声明前加上`volatile`关键字,如`volatile int var;`,以确保编译器不会将此变量...

    Java多线程设计模式_清晰完整PDF版 Java多线程设计模式源代码

    Java提供多种创建线程的方式,如继承Thread类、实现Runnable接口以及使用ExecutorService和Callable接口。每种方式有其适用场景和优缺点,例如,实现Runnable接口比继承Thread更灵活,因为可以避免类的单继承限制。 ...

Global site tag (gtag.js) - Google Analytics