Thread的调用

    在java里面创建线程new Thread().start(),在这里面先调用Thread.java的init()进行了初始化,然后调用了本地方法 start0(),这个方法实际上调用了hotspot\src\share\vm\prims\jvm.cpp文件里的JVM_StartThread方法。 在上面方法里new JavaThread(),这是jvm里面区分的线程类型。创建时候传进入一个函数指针thread_entry,这个函数将调用 用户实现的run()方法。在JVM_StartThread()最后通过Thread::start(native_thread)启动一个系统线程来执行用户创建的方法。 系统线程首先执行的是JavaThread里面的run方法,run方法进行一系列初始化后,调用thread_main_inner,这个就调用了上面传入 的thread_entry,真正的用户run方法由此开始执行。thread_main_inner最后执行退出及delete this ,删除JavaThread数据结构。
    在这一连串调用中,用到了一些技巧。通过os::create_thread(this, thr_type, stack_sz)将启动线程的系统调用和javaThread联系起来。  就象下面的做法
      class Thread{
              public:
                      Thread();
                      ~Thread();
                      void start();
                      virtual void run() = 0 ;
              private:
                       HANDLE thread_handle ;
       };

       class CommThread:public Thread{
             public:
                    CommThread(){}
                    ~CommThread(){}
                    virtual void run();
       };
   通过继承Thread类,就把一个线程变成个线程对象,更好体现了面向对象的编程思想。
      Thread的实现
      Thread::Thread(){
               unsigned thread_id;
               thread_handle =
                          (HANDLE)_beginthreadex(NULL,
                                                                   NULL,
                                                                   (unsigned (__stdcall *)(void*)) th_start,
                                                                   this,
                                                                   CREATE_SUSPENDED ,
                                                                   &thread_id);
      }

      Thread::~Thread(){
      }

      void Thread::start(){
                ResumeThread(thread_handle);
      }
   思路还是比较简单,在创建对象时候即开始一个堵塞线程,直到调用start时候才开始运行它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值