当前位置:  技术问答>java相关

请教关于线程的简单问题

    来源: 互联网  发布时间:2015-08-16

    本文导语:  以下是源程序: public class methodtest{   static class FirstThread extends Thread   {     public void run(){       try{            System.out.println("First thread starts running.");            sleep(10000);            S...

以下是源程序:
public class methodtest{
  static class FirstThread extends Thread
  {
    public void run(){
      try{
           System.out.println("First thread starts running.");
           sleep(10000);
           System.out.println("First thread finished running.");
         }catch(InterruptedException e){}
    } 
  }
  static class SecondThread extends Thread
  {
    public void run()
    {
      System.out.println("Second thread starts running.");
      System.out.println("Second thread suspends itself.");
      suspend();
      System.out.println("Second thread runs again and finishes.");
    }
  }  
  public static void main(String args[]){
    FirstThread first=new FirstThread();
    SecondThread second=new SecondThread();
    first.start();
    second.start();
    try{
         System.out.println("Waiting for first thread to finish...");
         first.join();
         System.out.println("It's a long wait!");
         System.out.println("Waking up second thread...");
         second.resume();
         System.out.println("Waiting for second thread to finish...");
         second.join();
       }catch(InterruptedException e){
         System.out.println("I'm ready to finish too.");
       }
  }
}
我期望的结果是在屏幕中先输出"First thread starts running",但是实际运行中先输出的却是"Waiting for first thread to finish...",这是为什么?
请各位高手多多指点。

|
下面的描述或许对你有用(摘自《Sun认证Java2程序员学习指南》):

 
   It is in the running state that most things of interest happen to threads. They execute their run() methods concurrently with other threads, they co-operate, share resources, and they even compete with each other to get their own tasks done. 
 
   Because instructions can be performed only one at a time in a single CPU computer, threads have to take turns running. Usually the threads are switching so fast between one another that the user gets the impression of true parallelism (we will discuss this more in the scheduling section of this chapter). For the moment, remember that there is never a guarantee that a thread will execute a series of instructions in one go; it may be switched at any time and get its turn later. If there is more than one CPU available, threads may truly run in parallel. 
 
   Once a thread is started, it is not guaranteed to be running all the time. The Java virtual machine (JVM) could switch over to another thread and execute it for a while, giving it some CPU time. These various states are standard Java terms used to describe the state of a thread at any given time during execution. There are essentially five states a thread can be in: new Thread,Runnable,Running,Waiting/Blocking,Dead.
---------------------------------------------------------------
应该讲得很清楚,在second.start()之后,first和second实际上还没有达到Running状态,CPU继续被Main()方法占有,所以先输出的是Waiting for...
至于CPU的分配,则和系统有关。


 

    
 
 

您可能感兴趣的文章:

  • 请教:线程中调用一个阻塞的方法后,进程及其它线程会阻塞么?
  • 请教大虾:),获取线程id的问题
  • 请教关于线程以及进程通行问题
  • 请教线程问题
  • 请教多线程优先级问题
  • 请教linux 2.6内核移植到arm上最大线程数量的问题。
  • 请教:pthread_join( )在等待一个已经退出的线程时为何会导致死锁?
  • 请教多线程程序的内存占用问题
  • 请教Linux下多线程C++编程
  • 请教如何Kill线程?
  • 请教高手,线程问题,怎样暂停或杀掉多线程?
  • 请教:有什么工具可以“看”到系统中正在运行的线程?
  • 请教:多线程使用同一个socket进行数据收发会出现什么问题?
  • 入门,请教线程编程的问题,请各路高手帮帮忙
  • 复杂的线程同步问题,请教高手
  • 请教java线程问题
  • 请教一个pthread线程库的使用的问题
  • 请教大家关于多线程
  • 搞不懂TI的demo的线程命名,请教
  • 急,在线等待!!!请教各位同仁一个多线程的问题??
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • 请教,请教,这个问题是为什么????
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教一个函数入口处的汇编问题(压栈问题)
  • 请教!出现这个提示是什么原因..是模块版本问题,还是其他问题..http://220.114.102.28/xitong/ProductShow.asp?ArticleID=82
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  • 请教一个opengl的问题
  • 请教两个redhat9问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教这种循环的执行过程
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教,如何用虚拟订机安装liux
  • php开源软件 iis7站长之家
  • 请教两个shell
  • 请教高手:如何用gnome/gtk编写托盘程序
  • 菜鸟请教Linux
  • 请教semop()函数的用法、含义
  • 请教个,关于C编译器参数CFLAGS的问题(真诚请教,分不够了全部送出)
  • 请问如何在Redhat7.1下安装Ftp服务,如何开启Ftp帐号????请教!!!急急急急急急
  • Think in java 问题。(请教)
  • 请教下我的eth0为什么设置后重启会失败?
  • 请教:$PWD 这个东西是什么意思啊?谢谢!
  • 请教高手AIX中怎么删除行尾的字符^M


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3