考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
全国  |             |          |          |          |          |         
  当前位置:计算机等级 > 二级考试 > Java语言程序设计 > 考试辅导 > 文章内容
  

计算机二级JAVA考点解析:多线程

中华IT学院   【 】  [ 2017年9月5日 ]

  7.1多线程的概念

  多线程编程的含义是你可将程序任务分成几个并行的子任务。特别是在网络编程中,你会发现很多功能是可以并发执行的。比如网络传输速度较慢,用户输入速度较慢,你可以用两个独立的线程去完成这?copy;功能,而不影响正常的显示或其他功能。多线程是与单线程比较而言的,普通的WINDOWS采用单线程程序结构,其工作原理是:主程序有一个消息循环,不断从消息队列中读入消息来决定下一步所要干的事情,一般是一个子函数,只有等这个子函数执行完返回后,主程序才能接收另外的消息来执行。比如子函数功能是在读一个网络数据,或读一个文件,只有等读完这?copy;数据或文件才能接收下一个消息。在执行这个子函数过程中你什么也不能干。但往往读网络数据和等待用户输入有很多时间处于等待状态,多线程利用这个特点将任务分成多个并发任务后,就可以解决这个问题。

  7.1.1Java线程的模型

  Java的设计思想是建立在当前大多数操作系统都实现了线程调度。Java虚拟机的很多任务都依赖线程调度,而且所有的类库都是为多线程设计的。实时上,Java支持Macintosh和Ms-dos的平台?reg;所以迟迟未出来就是因为这两个平台都不支持多线程。Java利用多线程实现了整个执行环境是异步的。在Java程序里没有主消息循环。如果一个线程等待读取网络数据,它可以运行但不停止系统的其他线程执行。用于处理用户输入的线程大多时间是等待用户敲键盘或击鼠标。你还可以使动画的每一帧?reg;间停顿一秒而并不使系统暂停。一?copy;线程启动后,它可以被挂起,暂时不让它执行。挂起的线程可以重新恢复执行。任何时间线程都可以被停止,被停止的线程就不能再重新启动。Java语言里,线程表现为线程类,线程类封装了所有需要的线程操作控制。在你心里,必须很清晰地区分开线程对象和运行线程,你可以将线程对象看作是运行线程的控制面板。在线程对象里有很多函数来控制一个线程是否运行,睡眠,挂起或停止。线程类是控制线程行为的唯一的手段。一?copy;一个Java程序启动后,就已经有一个线程在运行。你可通过调用Thread.currentThread函数来查看当前运行的是哪一个线程。

  你得到一个线程的控制柄,你就可以作很有趣的事情,即使单线程也一样。下面这个例子让你知道怎样操纵当前线程。Filename:testthread

  classtestthread{publicstaticvoidmain(Stringargs[]){Threadt

  =Thread.currentThread();t.setName(\"ThisThreadisrunning\");

  System.out.println(\"Therunningthread:\"+t);try{for(inti=0;i

  {System.out.println(\"Sleeptime\"+i);Thread.sleep(1000);}

  }catch(InterruptedExceptione){System.out.println(\"threadhaswrong\");}

  }}

  执行结果:javatestthreadTherunningthread:Thread[ThisThreadisrunning,5,main]Sleeptime0Sleeptime1Sleeptime2Sleeptime3Sleeptime4

  7.1.2启动接口

  一个线程并不激动人心,多个线程才有实际意义。我们怎样创建更多的线程呢?我们需要创建线程类的另一个实例。当我们构造了线程类的一个新的实例,我们必须告诉它在新的线程里应执行哪一段程序。你可以在任意实现了启动接口的对象上启动一个线程。启动接口是一个抽象接口,来表示本对象有一?copy;函数想异步执行。要实现启动接口,一个类只需要有一个叫run的函数。下面是创建一个新线程的例子:

  Filename:twothread.java

  classtwothreadimplementsRunnable{twothread(){Threadt1

  =Thread.currentThread();t1.setName(\"Thefirstmainthread\");

  System.out.println(\"Therunningthread:\"+t1);Threadt2=new

  Thread(this,\"thesecondthread\");System.out.println(\"creatanother

  thread\");t2.start();try{System.out.println(\"firstthreadwill

  sleep\");Thread.sleep(3000);}catch(InterruptedExceptione)

  {System.out.println(\"firstthreadhaswrong\");}

  System.out.println(\"firstthreadexit\");}publicvoidrun(){try{for

  (inti=0;i

  Thread.sleep(1000);}

  }catch(InterruptedExceptione){System.out.println(\"threadhas

  wrong\");}

  System.out.println(\"secondthreadexit\");}publicstaticvoid

  main(Stringargs[]){newtwothread();}}

  执行结果:javatwothread

  Therunningthread:Thread[Thefirstmainthread,5,main]creatanother

  threadfirstthreadwillsleepSleeptimeforthread2:0Sleeptimefor

  thread2:1Sleeptimeforthread2:2firstthreadexitSleeptimefor

  thread2:3Sleeptimeforthread2:4secondthreadexit

  main线程用newThread(this,\"thesecondthread\")创建了一个Thread对象,通过传递第一个参数来标明新线程来调用this对象的run函数。然后我们调用start函数,它将使线程从run函数开始执行。

首页 1 2 3 4 尾页
分享到:
本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2006-2017 中华考试网(Examw.com) All Rights Reserved  营业执照