深入理解线程对象和线程
让我们先以C++来说明,然后我们转到JAVA上来,因为c++对对象的销毁更直接一些:
到目前为止,C++还没有直接支持多线程,意思是说多线程不是C++标准库,这也是JAVA程序员对于
多线程编程比C++程序更精通一些(这是普通来说的,你不要拿一个C++多线程高手和普通的JAVA程
序员比),因为JAVA程序从一开始就接收了多线程的思想并不断地训练.
目前最有可能被下一代C++标准采用的多线程库是ZThread,或者我们可以直接用VC的CWinThread来
举例,它们都是标准C++上对线程的扩展实现.
class MyRunnable: public ZThread::Runnable{
public:
void Run(){
for(int i = 0;i< 100000;i++){
//输出;
//sleep;
}
}
~MyRunnable(){}
}
for(int i = 0;i< 10;i++){
Thread zt(new MyRunnable());
}
我们非常清楚地看到,在C++中,循环内的变量在跳出循环后,就会被直接从栈中自动销毁,但是线程却
实实在在地在工作.
这在理论上与C++是相悖的,一个对象本身已经从栈中退出,那么如何运行它的代码?
如果我一开始用JAVA来举例,你可能会说虽然对象跳出了循环但它还在垃圾回收器中,等到线程执行
完成后才被回收.但我们用C++来说明,基于栈的变量zt每次跳出循环就一定被从栈中销毁,那么线程
又如果运行下去呢?
这正是我在之前一直强调的两个概念,线程对象和线程的区别.一个线程对象,在开始运行的时候(JAVA
中从调用线程对象的start(),ZThread中构造函数完成后会直接启动),就将当前线程所要执行的任务
及相关上下文注册到线程处理系统内.线程对象只是向这个处理系统注册的句柄,注册后如何执行线程
对象要完成的操作那就由线程处理系统来统一管理了,这里线程对象已经完成了它的使命,无论是直接
从栈中销毁还是直接被垃圾回收器回收,还是继续存放在原来的内存位置,都不影响线程处理系统来处
理要完成的操作.
分享到:
相关推荐
### JAVA线程深入了解 #### 一、JAVA线程启动方式详解 ##### 1. 利用`Thread`类的子类...以上是对Java线程深入理解的一些关键知识点的详细介绍。通过掌握这些内容,可以帮助开发者更好地编写高效、稳定的多线程程序。
Java线程的深入理解和熟练掌握是Java程序员必备的技能,它涉及到程序的性能优化、并发控制和安全性,是开发复杂多线程应用的基础。在实际开发中,合理使用线程同步机制和理解线程调度原理,可以有效避免死锁、活锁等...
在多线程编程中,线程间的通信是一个关键部分,以协调不同线程间的工作并确保数据的...在这个例子中,`vc技术内幕11章`为我们提供了一个实用的实践平台,帮助我们深入理解事件对象的使用方法和其在多线程环境中的作用。
在C++编程中,面向对象和多线程是两个重要的概念,它们对于开发高效、并发的软件至关重要。本文将深入探讨这两个主题,并结合C++语言特性进行详细解释。 首先,让我们了解一下面向对象编程(Object-Oriented ...
2. **ST2MO (Simple Thread to Multiple Objects)**:适用于网络框架,通过对象池和超时管理器来协调多个线程和对象之间的交互。 3. **SO2MT (Single Object to Multiple Threads)**:一种异步化和解耦合的模式,...
多线程管理主要包括创建线程、启动线程和结束线程。创建线程时,需要实例化TThread的子类,并设置相应的属性,如FreeOnTerminate(确定线程结束后是否释放)和CreateSuspended(决定线程是否立即运行)。启动线程...
7. **主线程**:`main`函数是程序的起点,它创建了两个`CWorkerThread`对象,分别为线程A和线程B,然后对它们进行操作,最后输出“Both threads complete.”,表明所有线程都已完成执行。 通过这个源代码,我们可以...
本主题将深入探讨MFC中的多线程,特别是工作者线程和用户界面线程。 一、MFC多线程基础 MFC通过CWinThread类支持多线程。每个线程都是一个独立的执行路径,拥有自己的堆栈和上下文。CWinThread是所有MFC线程的基类...
本教程将深入探讨四种常见的线程同步机制:事件对象、信号量、互斥量以及临界区,帮助开发者理解和掌握如何在VC++中安全地实现多线程通信。 一、事件对象 事件对象是Windows API中用于线程间通信的一种同步机制。它...
创建线程的基本步骤包括定义线程函数、创建线程对象和启动线程。线程函数通常包含需要并发执行的任务,而线程对象则代表了一个可以独立运行的代码段。 1. **线程函数定义**: 易语言中,线程函数需要通过`线程入口...
- **新建(New)**:当使用`Thread`类的构造函数创建一个新的线程对象时,线程处于新建状态。 - **就绪(Runnable)**:调用线程的`start()`方法后,线程进入就绪状态,等待CPU调度。 - **运行(Running)**:当线程...
《C++面向对象多线程编程》是一本深入探讨如何在C++环境中利用面向对象特性进行多线程程序设计的专业书籍。它旨在帮助C++程序员掌握如何构建高效、稳定的多线程架构,以及如何实现增量多线程编程技术。通过本书,...
总之,《深入浅出Win32多线程程序设计之线程控制》这本书将引导读者深入了解Win32 API在多线程编程中的应用,包括线程创建、同步、优先级、局部存储、异常处理和资源管理等多个方面,为开发高效稳定的多线程程序打下...
首先,我们来了解线程的基本概念。线程是操作系统分配CPU时间的基本单位,每个线程都有自己的程序计数器、栈、局部变量等,但共享同一块内存空间,包括全局变量和静态变量。线程间的通信比进程间通信更为高效,因为...
`Thread`类是最基本的线程对象,用于创建和执行新的线程。线程启动通常是通过`Thread.Start()`方法完成的,这使得新线程开始执行其`ThreadStart`委托所指向的方法。线程的暂停则相对复杂,因为线程的暂停和恢复并不...
与JAVA不同,C++中的线程对象并不直接执行任务,而是将可调用对象(如函数、函数指针或lambda表达式)作为参数传递给构造函数。线程同步则通过`mutex`(互斥锁)、`condition_variable`(条件变量)、`future`和`...
本文将深入探讨如何使用CEvent对象来实现线程间的同步。 CEvent类是MFC对Windows API中的`CreateEvent`函数的封装,用于创建一个事件对象,该对象可以被线程用来通信和同步。事件对象有两种状态:未设定(非信号...
`list.h`可能提供了线程对象的链表数据结构,用于在内存中管理和组织线程,这在调度算法中非常常见,因为它们允许快速插入、删除和遍历。 源码中的`thread.cc`可能实现了线程的创建、销毁、挂起、恢复等操作,以及...
2. 创建线程对象:使用CWinThread派生类或CreateThread API创建线程对象。 3. 指定线程函数:将线程函数作为参数传递给创建函数。 4. 启动线程:调用CWinThread的Run成员函数或直接调用CreateThread后的线程句柄。 ...
通过阅读和理解这段代码,开发者可以深入理解MFC线程同步的实现。 9. **实际应用**:这种线程间的通信方式广泛应用于各种软件开发中,例如在后台更新、数据加载、用户界面更新等场景,保证了程序的稳定性和正确性。...