使用java编程语言实现线程

使用java编程语言实现线程

ID:8982265

大小:43.50 KB

页数:7页

时间:2018-04-14

使用java编程语言实现线程_第1页
使用java编程语言实现线程_第2页
使用java编程语言实现线程_第3页
使用java编程语言实现线程_第4页
使用java编程语言实现线程_第5页
资源描述:

《使用java编程语言实现线程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、使用Java编程语言实现线程Java编程语言使多线程如此简单有效,以致于某些程序员说它实际上是自然的。尽管在Java中使用线程比在其他语言中要容易得多,仍然有一些概念需要掌握。要记住的一件重要的事情是main()函数也是一个线程,并可用来做有用的工作。程序员只有在需要多个线程时才需要创建新的线程。Thread类Thread类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从Thread类导出的新类。程序员必须覆盖Thread的run()函数来完成有用的工作。用户并不直接调用此函数;而

2、是必须调用Thread的start()函数,该函数再调用run()。下面的代码说明了它的用法:创建两个新线程importjava.util.*;classTimePrinterextendsThread{intpauseTime;Stringname;publicTimePrinter(intx,Stringn){pauseTime=x;name=n;}publicvoidrun(){while(true){try{System.out.println(name+":"+newDate(System.currentTim

3、eMillis()));Thread.sleep(pauseTime);}catch(Exceptione){System.out.println(e);}}}staticpublicvoidmain(Stringargs[]){TimePrintertp1=newTimePrinter(1000,"FastGuy");tp1.start();TimePrintertp2=newTimePrinter(3000,"SlowGuy");tp2.start();}}在本例中,我们可以看到一个简单的程序,它按两个不同的时间间隔

4、(1秒和3秒)在屏幕上显示当前时间。这是通过创建两个新线程来完成的,包括main()共三个线程。但是,因为有时要作为线程运行的类可能已经是某个类层次的一部分,所以就不能再按这种机制创建线程。虽然在同一个类中可以实现任意数量的接口,但Java编程语言只允许一个类有一个父类。同时,某些程序员避免从Thread类导出,因为它强加了类层次。对于这种情况,就要runnable接口。Runnable接口此接口只有一个函数,run(),此函数必须由实现了此接口的类实现。但是,就运行这个类而论,其语义与前一个示例稍有不同。我们可以用ru

5、nnable接口改写前一个示例。(不同的部分用黑体表示。)创建两个新线程而不强加类层次importjava.util.*;classTimePrinterimplementsRunnable{intpauseTime;Stringname;publicTimePrinter(intx,Stringn){pauseTime=x;name=n;}publicvoidrun(){while(true){try{System.out.println(name+":"+newDate(System.currentTimeMilli

6、s()));Thread.sleep(pauseTime);}catch(Exceptione){System.out.println(e);}}}staticpublicvoidmain(Stringargs[]){Threadt1=newThread(newTimePrinter(1000,"FastGuy"));t1.start();Threadt2=newThread(newTimePrinter(3000,"SlowGuy"));t2.start();}}请注意,当使用runnable接口时,您不能直接创建所需

7、类的对象并运行它;必须从Thread类的一个实例内部运行它。许多程序员更喜欢runnable接口,因为从Thread类继承会强加类层次。synchronized关键字到目前为止,我们看到的示例都只是以非常简单的方式来利用线程。只有最小的数据流,而且不会出现两个线程访问同一个对象的情况。但是,在大多数有用的程序中,线程之间通常有信息流。试考虑一个金融应用程序,它有一个Account对象,如下例中所示:一个银行中的多项活动publicclassAccount{StringholderName;floatamount;publ

8、icAccount(Stringname,floatamt){holderName=name;amount=amt;}publicvoiddeposit(floatamt){amount+=amt;}publicvoidwithdraw(floatamt){amount-=amt;}publicfloatcheckB

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。