线程(已阅).docVIP

  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文档。上传文档
查看更多
线程(已阅)

线程 线程的状态 线程的状态表示线程在某段时间内进行的活动和将要进行的任务。线程有创建、就绪、运行、阻塞、死亡5种状态。 创建状态 实例化Thread对象,但没有调用start()方法时的状态。例如: ThreadTest tt=new ThreadTest(); 或者 Thread t=new Thread(tt); 此时虽然创建了Thread对象,但是他们暂时不能通过isAlive()测试。 就绪状态 程序有资格运行,当调度程序还没有把它选为线程运行时所处的状态。此时,线程具备了运行的条件,一旦被选中马上就能运行。 线程创建后,调用了start()方法,线程不处于运行状态,但能通过isAlive()测试。在线程运行后,或者从被阻塞、等待或者睡眠状态回来之后,线程首先进入就绪状态。 运行状态 从就绪状态池(是池,不是队列)中被选择为当前执行的线程所处的状态。 等待、阻塞或者睡眠状态 线程依然是活的,但是缺少运行的条件,一旦具备了条件就可以转为就绪状态(不能直接转为运行状态)。另外,suspend()和stop()方法已经被废弃了,比较危险,不要再使用了。 死亡状态 一个线程的run()方法运行结束,那么该线程就完成了它的使命,它的栈结构将解散,也就是死亡了。但是该线程仍然是一个Thread对象,仍可以被引用这一点与其他对象一样,而且被引用的对象也不会被垃圾回收器回收。 一旦线程死去,他就永远不能重新启动了,也就是说,不能再用start()方法让它运行。 创建线程有两种方式。 ⑴继承java.lang.Thread类 public class ThreadTest extends Thread { public void run(){ System.out.println(something run here!); } public void run(String s){ System.out.println(string in run is+s); } public static void main(String[] args) { ThreadTest tt=new ThreadTest(); tt.start(); tt.run(it wont auto run); } } 运行结果如下: string in run isit wont auto run something run here! 注意:是否与想象的顺序相反了?为什么呢? 一旦调用了start()方法,必须给JVM留足时间,让它配置进程。而在JVM配置完成之前,重载的run(String s)方法被调用了,结果反而先输出了“string in run is it won’t auto run”。之后,tt线程完成了配置,输出了“something run here!” 这个结论是比较容易验证。 修改上面的程序,在“tt.start();”语句后面加上语句“for(int i=0;i10000;i++);”.主线程必须执行运算量比较大的for循环,只有执行完for循环才能运行后面的“tt.run(“it won’t auto run!”);”语句。此时,因为有足够的时间完成线程的配置,所以修改后的程序运行结果如下: something run here stirng in run is it won’t auto run! 注意:这种输出结果的顺序是没有保障!不要依赖循环耗时! Thread类有许多管理线程的方法,包括创建、启动和暂停他们,所有的操作都是从run()方法开始,并且在run()方法内编写需要在独立线程内执行的代码。run()方法可以调用其他方法,但是执行的线程总是通过调用run()开始。 没有参数的run()方法是自动被调用的,而带参数的run()是被重载的,必须显示调用。 上面示例中创建线程的方式很简单,但不是最好的方案。Java是单继承结构的,如果继承了Thread类,那么就不能继承其它的类了,应该把继承的机会留给别的类。 ⑵实现java.lang.Runnable接口 public class ThreadTest implements Runnable { public void run(){ System.out.println(something run here!); } public static void main(String[] args) { ThreadTest tt=new ThreadTest(); Thread t1=new Thread(tt); Thread t2=new Thread(tt); t1.start(

文档评论(0)

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

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

1亿VIP精品文档

相关文档