Java中的线程
Java语言内置对多线程的支持(java.lang包中的Thread类)。多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况,Java快速地把控制从一个线程切换到另一个线程。
程序时一段静态的代码,进程是程序的一次动态执行,对应了从代码加载、执行至执行完毕的一个完整过程,是其本身从产生、发展、消亡的过程。线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,是每个线程,都有自身的产生、存在、消亡的过程,进程和线程都是动态的概念。
操作系统使用分时管理各个进程,按时间片轮流执行每个进程。Java的多线程就是在OS每次分时给Java程序的一个时间片的CPU时间内,在若干个独立的可控制的线程之间切换。每个进程都有一段专用的内存区域,线程间可以共享相同的内存单元(包括代码和数据),并利用共享单元实现数据交换、实时通信和必要的同步操作。
线程的生命周期
线程的4中状态:新建(有了相应的内存空间和其他资源)、运行(若是Thread的子类创建的,要在子类中重写父类的run()方法)、中断、死亡。
中断原因4种:
① JVM将CPU资源从当前线程切换给其他线程,让本线程让出CPU的使用权处于中断状态。
② 线程使用CPU资源期间,执行了sleep(int millsecond)方法,使得线程进入休眠状态。立刻让出CPU的使用权,使当前线程处于中断状态,经过millsecond毫秒之后,该线程就重新进到线程队列中排队等待CPU资源,以便从中断处继续运行。
③ 线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态。有其他线程调用notify()方法通知它,使得它能重新进到线程队列中排队等待CPU资源,以便从中断处继续运行。
④ 线程使用CPU资源期间,执行某个操作进入阻塞状态,如执行读写操作引起阻塞。此时线程不能进入排队队列,只有引起阻塞的原因消除时,使得它能重新进到线程队列中排队等待CPU资源,以便从中断处继续运行。
死亡原因2种:
① 正常运行的线程完成了它的全部工作,即执行完run()方法中的全部语句,结束了run()方法;
② 线程被提前强制性终止,即强制run()方法结束。
所谓死亡状态,就是线程释放了实体,即释放分配给线程对象的内存。
线程的优先级与调度管理:10个级别(1-10):有些OS只有3个级别:1,5,10。
不提倡使用线程的优先级来保证算法的正确执行。
在采用时间片的系统中,每个线程都有机会获得CPU的使用权,以便使用CPU的资源执行线程中的操作。当线程使用CPU资源的时间结束后,即使线程没有完成自己的全部操作,Java调度器也会中断当前线程的执行,把CPU的使用权切换给下一个排队等待的线程,当前线程将等待CPU资源的下一次轮回,然后从中断处继续执行。
-------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------