多线程编程 深入理解线程对象和线程
2006-08-15 10:18
567 查看
深入理解线程对象和线程
让我们先以C++来说明,然后我们转到J***A上来,因为c++对对象的销毁更直接一些:
到目前为止,C++还没有直接支持多线程,意思是说多线程不是C++标准库,这也是J***A程序员对于
多线程编程比C++程序更精通一些(这是普通来说的,你不要拿一个C++多线程高手和普通的J***A程
序员比),因为J***A程序从一开始就接收了多线程的思想并不断地训练.
目前最有可能被下一代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++是相悖的,一个对象本身已经从栈中退出,那么如何运行它的代码?
如果我一开始用J***A来举例,你可能会说虽然对象跳出了循环但它还在垃圾回收器中,等到线程执行
完成后才被回收.但我们用C++来说明,基于栈的变量zt每次跳出循环就一定被从栈中销毁,那么线程
又如果运行下去呢?
这正是我在之前一直强调的两个概念,线程对象和线程的区别.一个线程对象,在开始运行的时候(J***A
中从调用线程对象的start(),ZThread中构造函数完成后会直接启动),就将当前线程所要执行的任务
及相关上下文注册到线程处理系统内.线程对象只是向这个处理系统注册的句柄,注册后如何执行线程
对象要完成的操作那就由线程处理系统来统一管理了,这里线程对象已经完成了它的使命,无论是直接
从栈中销毁还是直接被垃圾回收器回收,还是继续存放在原来的内存位置,都不影响线程处理系统来处
理要完成的操作.
让我们先以C++来说明,然后我们转到J***A上来,因为c++对对象的销毁更直接一些:
到目前为止,C++还没有直接支持多线程,意思是说多线程不是C++标准库,这也是J***A程序员对于
多线程编程比C++程序更精通一些(这是普通来说的,你不要拿一个C++多线程高手和普通的J***A程
序员比),因为J***A程序从一开始就接收了多线程的思想并不断地训练.
目前最有可能被下一代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++是相悖的,一个对象本身已经从栈中退出,那么如何运行它的代码?
如果我一开始用J***A来举例,你可能会说虽然对象跳出了循环但它还在垃圾回收器中,等到线程执行
完成后才被回收.但我们用C++来说明,基于栈的变量zt每次跳出循环就一定被从栈中销毁,那么线程
又如果运行下去呢?
这正是我在之前一直强调的两个概念,线程对象和线程的区别.一个线程对象,在开始运行的时候(J***A
中从调用线程对象的start(),ZThread中构造函数完成后会直接启动),就将当前线程所要执行的任务
及相关上下文注册到线程处理系统内.线程对象只是向这个处理系统注册的句柄,注册后如何执行线程
对象要完成的操作那就由线程处理系统来统一管理了,这里线程对象已经完成了它的使命,无论是直接
从栈中销毁还是直接被垃圾回收器回收,还是继续存放在原来的内存位置,都不影响线程处理系统来处
理要完成的操作.
相关文章推荐
- 【C/C++多线程编程之五】pthread线程深入理解
- 多线程编程之pthread线程深入理解
- 【C/C++多线程编程之五】pthread线程深入理解
- 多线程编程博客推荐及phread线程的深入理解
- 【 Java多线程】编程基础之线程对象
- Java多线程编程基础之线程对象
- 多线程编程 深入理解JMM
- Java多线程编程基础之线程对象
- JavaScript创建对象:深入理解编程原理
- 面向对象思考之类和对象的深入思考与理解,那些我们忽略的编程思想
- 深入理解JAVA多线程之线程间的通信方式
- Java多线程编程基础之线程对象
- 集体智慧编程第六章对面向对象的深入理解
- windows多线程编程--线程与同步对象CSemaphore,CMutex,CCriticalSection,CEvent简述(2007-07-15 11:07)
- 多线程编程 深入理解DCL的安全性
- 深入理解C语言11 基于对象(Object based)编程
- Java多线程编程基础之线程对象
- Linux多线程编程之同步对象编程:线程信号量
- 并发编程之美-深入理解java多线程原理
- 多线程学习之深入理解Java多线程与并发编程