您的位置:首页 >> 编程开发 >> Java >> 线程 >> 正文
线程 RSS
 

Java线程获取优异性能(I)——介绍线程、线程类及Runnable

http://www.rdxx.com 05年05月03日 12:12 计算机世界 我要投稿

关键词: 获取 , 线程 , Java , , 性能
用Java线程获取优异性能(I)

摘要
用户期望程序能展现优异的性能。为了满足这个期望,你的程序常常使用到线程。在这篇文章中我们开始练习使用线程。你将学习到线程、线程类及Runnable。

用户不喜欢反应迟钝的软件。当用户单击一个鼠标时,他们希望程序立即回应他们的请求,即使程序正处于费时的运行之中,比如为一篇很长的文档重编页码或等待一个网络操作的完成。对用户响应很慢的程序其性能拙劣。为提高程序性能,开发者一般使用线程。
这篇文章是探索线程的第一部份。虽然你可能认为线程是一种难于掌握的事物,但我打算向你显示线程是易于理解的。在这篇文章中,我将向你介绍线程和线程类,以及讨论Runnable。此外,在后面的文章中,我将探索同步(通过锁),同步的问题(比如死锁),等待/通知机制,时序安排(有优先权和没有优先权),线程中断,计时器,挥发性,线程组和线程本地变量。
阅读关于线程设计的整个系列:
·第1部份:介绍线程和线程类,以及Runnable
·第2部份:使用同步使线程串行化访问关键代码部份
注意
这篇文章及其应用程序的三个相关线程练习与applets不同。然而,我在应用程序中介绍的多数应用到applets。主要不同的是:为了安全的原因,不是所有的线程操作都可以放到一个applet中(我将在以后的文章中讨论applets)。
什么是线程?
线程的概念并不难于掌握:它是程序代码的一个独立的执行通道。当多个线程执行时,经由相同代码的一个线程的通道通常与其它的不同。例如,假设一个线程执行一段相当于一个if-else语句的if部分的字节代码时,而另一个线程正执行相当于else部分的字节代码。JVM怎样保持对于每一个线程执行的跟踪呢?JVM给每一个线程它自己的方法调用堆栈。另外跟踪当前指令字节代码,方法堆栈跟踪本地变量,JVM传递给一个方法的参数,以及方法的返回值。
当多个线程在同一个程序中执行字节代码序列时,这种行为叫作多线程。多线程在多方面有利于程序:
·当执行其它任务时多线程GUI(图形用户界面)程序仍能保持对用户的响应,比如重编页码或打印一个文档。
·带线程的程序一般比它们没有带线程的副本程序完成得快。这尤其表现在线程运行在一个多处理器机器上,在这里每一个线程都有它自己的处理器。
Java通过java.lang.Thread类完成多线程。每一个线程对象描述一个单独的执行线程。那些运行发生在线程的run()方法中。因为缺省的run()方法什么都不做,你必须创建Thread子类并重载run()以完成有用的工作。练习列表1中领略一个在Thread中的线程及多线程:
列表1. ThreadDemo.java
// ThreadDemo.java
class ThreadDemo
{
public static void main (String [] args)
{
MyThread mt = new MyThread ();
mt.start ();
for (int i = 0; i < 50; i++)
System.out.println ("i = " + i + ", i * i = " + i * i);
}
}
class MyThread extends Thread
{
public void run ()
{
for (int count = 1, row = 1; row < 20; row++, count++)
{
for (int i = 0; i < count; i++)
System.out.print ('*');
System.out.print ('\n');
}
}
}
列表1显示了一个由类ThreadDemo和MyThread组成的应用程序的源代码。类ThreadDemo通过创建一个MyThread对象驱动应用程序,开始一个与其对象相关的线程并执行一段打印一个正方形表的代码。相反, MyThread重载Thread的run()方法打印(通过标准输入流)一个由星形符号组成的直角三角形。
当你键入java ThreadDemo运行应用程序时, JVM创建一个运行main()方法的开始线程。通过执行mt.start (),开始线程告诉JVM创建一个执行包含MyThread对象的run()方法的字节代码指令的第二个线程。当start()方法返回时,开始线程循环执行打印一个正方形表,此时另一个新线程执行run()方法打印直角三角形。
输出会象什么样呢?运行ThreadDemo就可以看到。你将注意到每一个线程的输出与其它线程的输出相互交替。这样的结果是因为两个线程将它们的输出都发送到了同样的标准输出流。

共9页  1 2 3 4 5 6 7 8 9


 
 
标签: 获取 , 线程 , Java , , 性能 打印本文
 
 
  相关资讯
RSS
 
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站