深入理解线程对象和线程

深入理解线程对象和线程

让我们先以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中构造函数完成后会直接启动),就将当前线程所要执行的任务
及相关上下文注册到线程处理系统内.线程对象只是向这个处理系统注册的句柄,注册后如何执行线程
对象要完成的操作那就由线程处理系统来统一管理了,这里线程对象已经完成了它的使命,无论是直接
从栈中销毁还是直接被垃圾回收器回收,还是继续存放在原来的内存位置,都不影响线程处理系统来处
理要完成的操作.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值