Java中线程的概念学习--Java编程

时间:2015-7-28 19:12:47

  核心提示:1.1程序、进程与线程程序:程序以静态的代码,如源程序、目标程序。进程:进程是程序的一次动态的执行过程。平时我们在Windows任务管理器里就可以看到系统进程。线程:线程是比进程更小的执行单位。每个J...

1.1 程序、进程与线程 

程序:程序以静态的代码,如源程序、目标程序。

进程:进程是程序的一次动态的执行过程。平时我们在Windows任务管理器里就可以看到系统进程。

线程:线程是比进程更小的执行单位。 每个Java进程都有一个主线程。从main()开始,由Java虚拟机创建。其它线程由主线程创建。

1.2 线程调度与优先级 

线程的优先级是按照线程的重要性来分的,因为在多个线程执行过程中,会出现多个线程同时想占用同一个资源的情况,如果不用优先级来约束这些线程,机器将处于死锁状态,即谁都想要这个资源,但谁都得不到。这就相当于我们平时说的退一步海阔天空是一个道理。

我们可以通过调用 Thread 类的方法getPriority()和setPriority()来获得和设置线程的优先级,线程的优先级界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间,缺省是5(NORM_PRIORITY)。

1.3 线程的状态与生命周期 

l 新状态:线程已被创建但尚未执行(start()尚未被调用)。

l 可执行状态:线程可以执行,虽然不一定正在执行。CPU 时间随时可能被分配给该线程,从而使得它执行。

l 运行状态:得到CPU资源,正在执行。

l 阻塞状态:线程没有被分配 CPU 时间,无法执行;可能阻塞于I/O,或者阻塞于同步锁。

l 死亡状态:正常情况下run()返回使得线程死亡。调用 stop()或 destroy()也有同样效果,但是不被推荐,前者会产生异常,后者是强制终止,不会释放锁。

一个线程的生命周期分为生成、运行、等待、终止等阶段,各阶段及状态间的转换条件具体如图所示:            



1.4 控制一个线程生命周期最常用的方法:

(1)start():线程调用该方法启动一个线程,使之从新建状态进入就绪队列,一旦获得CPU就可以脱离创建它的主线程独立开始自己的生命周期。

(2)run():线程的所有活动都是通过线程体run()方法定义,并实现线程对象被调用之后所执行的操作。

(3) stop():为强制终止某个线程的执行,Thread类提供了线程最后一个控制即停止方法stop()。

(4) suspend():在Java语言程序中经常需要挂起一个线程而不指定多少时间,此时可用Thread类提供的suspend()方法,这个方法并不永久地停止线程。

(5) resume():暂停的线程可以重新激活,重新激活的方法为resume()方法。由于suspend()包含了对象锁,所以它使线程极易出现死锁现象,即被锁住的对象在永久地等待resume()方法,对暂停的线程不能使用start()方法重新启动该线程。

(6) isAlive():一个线程已经启动而且没有停止则被认为是激活的,可通过测试线程来判断线程是否被激活。测试方法为isAlive(),如果isAlive()方法返回true,则该线程是激活的。

(7) sleep():Java语言Thread类中提供的sleep()方法是简单地告诉线程休息多少个毫秒的时间,如果想要推迟一个线程的执行,则可以使用sleep()方法。当线程睡眠的时候,sleep()方法并不占用系统资源,其他的线程仍然可以继续工作。一旦延迟时间完毕,则该休眠线程就被激活。sleep()方法的基本调用形式采用一个以毫秒为单位的参数,它使线程暂停一段规定的延时时间。当延时完成后,线程则继续工作。由于Java运行系统采用了线程调度机制,所以通过在run()的主循环中插入对sleep()的调用,一般都可以使Java语言程序运行得更快一些。因为在正在运行的线程准备进入休眠状态之前,较短的延迟可能造成sleep()结束调度机制的中断,强迫调度机制将其中止,并于稍后重新启动,以便该线程能做完它自己的事情,再进入休眠状态。

(8)wait()和notify():当编写的Java语言程序被分成几个逻辑线程时,需要清晰地知道这些线程之间应怎样相互通讯。例如网络数据交换程序经常需要使用Sleep()、Wait()、Suspend()等方法使一个线程进入等待状态,同时需要另一个线程使用Notify()、Resume()等方法将等待线程激活。 


 

Java免费学习   Java自学网 http://www.javalearns.com

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java

作者:不详 来源:网络
    你是从哪里知道本网站的?
  • 网友介绍的
  • 百度搜索的
  • Google搜索的
  • 其它搜索过来的
  • 网址输错了进来的
  • 太忙了不记得了
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • java学习网(www.javalearns.com) © 2014 版权所有 All Rights Reserved.
  • Email:javalearns@163.com 站长QQ:1356121699 晋ICP备14003680号-3
  • java学习网部分内容来自网络或网友发布,如侵犯了您利益,请发邮件至:javalearns@126.com,我们尽快处理!
  • Java学习网
  • 网站统计
  • 晋公网安备 14042902000001号