Java-线程优质精品文档.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

线程

一、什么是线程

进程是指运行中的应用程序,每一个进程都有自己独立的内存空间。一个应用程序可以同时启动多个进程。例如每打开一个IE浏览器窗口,就启动了一个新的进程。同样,每次执行JDK的java.exe程序,就启动了一个独立的Java虚拟机进程,该进程的任务是解析并执行Java程序代码。

线程是指进程中的一个执行流程。一个进程可以由多个线程组件。即在一个进程中可以同时运行多个不同的线程,它们分别执行不同的任务,当进程内的多个线程同时运行时,这种运行方式称为并发运行。

线程与进程的主要区别在于:每个进程都需要操作系统为其分配独立的内存地址空间,而同一进程中的所有线程在同一块地址空间中工作,这些线程可以共享同一块内存和系统资源。比如共享一个对象或者共享已经打开的一个文件。

二、java中的线程

在java虚拟机进程中,执行程序代码的任务是由线程来完成的。每当用java命令启动一个Java虚拟机进程时,Java虚拟机都会创建一个主线程。该线程从程序入口main()方法开始执行。

计算机中机器指令的真正执行者是CPU,线程必须获得CPU的使用权,才能执行一条指令。

三、线程的创建和启动

前面我们提到Java虚拟机的主线程,它从启动类的main()方法开始运行。此外,用户还可以创建自己的线程,它将和主线程并发运行。创建线程有两种方式,如下:

扩展java.lang.Thread类;

实现Runnable接口;

1.扩展java.lang.Thread类

Thread类代表线程类,它的最主要的两个方法是:

run()——包含线程运行时所执行的代码;

start()——用于启动线程;

用户的线程类只需要继承Thread类,覆盖Thread类的run()方法即可。在Thread类中,run()方法的定义如下:

publicvoidrun();//没有抛异常,所以子类重写亦不能抛异常

主线程与用户自定义的线程并发运行

Thread类的run()方法是专门被自身的线程执行的,主线程不能调用Thread类的run()方法,否则违背了Thread类提供run()方法的初衷;

Threadthread=Thread.currentThread();//返回当前正在执行这行代码的线程引用;

Stringname=thread.getName();//获得线程名字;

每个线程都有默认名字,主线程默认的名字为main,用户创建的第一个线程的默认名字为Thread-0,第二个线程的默认名字为Thread-1,依引类推。Thread类的setName()方法可以显示地设置线程的名字;

2)多个线程可以共享同一个对象的实例变量。

3)不要覆盖Thread类的start()方法。

创建了一个线程对象,线程并不自动开始运行,必须调用它自己的start()方法。对于以下代码:

//Machine为Thread类的子类

Machinemachine=newMachine();

machine.start();

当用new语句创建Machine对象时,仅仅在堆区内出现一个Machine对象,此时Machine线程并没有被启动。当主线程执行Machine对象的start()方法时,该方法会启动Machine线程。

4)一个线程只能被启动一次

//Machine为Thread类的子类

Machinemachine=newMachine();

machine.start();

machine.start();//抛出IllegalThreadStateException异常

2.实现Runnable接口

Java不允许一个类继承多个类,因此一旦一个类继承了Thread类,就不能再继承其他的类。为了解决这一问题,Java提供了java.lang.Runnable接口,它有一个run()方法,定义如下:

publicvoidrun();

例如:

//A类实现了接口Runnable,想启动这个线程类必须依靠一个Thread类的对象

Aa=newA();

Threadt=newThread(a);

t.start();

四、线程状态

线程在它的生命周期中会处于各种不同的状态;

1.新建状态(New)

用new语句创建的线程

文档评论(0)

8d758 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档