如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Java多线程Java线程模型线程是比进程更小的执行单位,是进程内部独立的,有序的指令流。由此,一个进程能包含多个并发执行的线程。线程是一种能够独立运行的子任务。多线程是一种允许在程序中并发执行彼此间互相独立的多个线程机制。多个线程的执行是并发的。多个线程之间的代码是乱序执行的,由此线程调度,同步等问题需要进行特殊处理。1.线程的生命周期1.新生状态当利用new运算符创建线程对象实例后,它仅仅作为一个对象实例存在,JVM没有为其分配CPU时间片等线程运行资源,该线程处于新生状态。2.可运行状态在处于新生状态的线程中调用start()方法将线程的状态转换为可运行状态。这时,线程已经得到除CPU时间之外的其它系统资源,只等JVM的线程调度管理器按照线程的优先级对该线程进行调度,从而使该线程拥有能够获得CPU时间片的机会。3.运行状态JVM的线程调度管理器选中一个可运行状态线程,使其占有CPU并转换为运行状态。运行状态的线程执行自己的run()方法中的代码,直到调用其他方法而终止、或等待某资源而阻塞或完成任务而死亡。4.睡眠状态处于运行状态的线程在某些情况下,如执行了sleep()方法,或等待I/O设备等资源,将让出CPU并暂时终止自己的运行,进入阻塞状态,也称为不可运行状态。处于阻塞状态的线程是不可执行的,即使CPU空闲,也不能执行。只有当引起阻塞的原因被消除时,线程转入可运行状态,重新进入线程队列中排队等待运行,再次运行时从原来终止处继续运行。5.死亡状态死亡状态是线程生命周期中的最后一个阶段。导致线程死亡的有2种情况:一是正常运行的线程完成了它的全部工作,这个任务完成的动作是由run()方法实现的;另一个是线程被强制性地终止,如通过执行stop()方法来终止一个线程。可以用isAlive()方法测试线程是否已启动。如果isAlive()方法返回false,表示该线程是新创建或已被终止;如果返回true,表示该线程已启动且未被终止,是可运行状态、运行状态或阻塞状态之一,但不能作进一步的分辨。2.线程控制(5)wait()方法wait()方法使得当前线程进入阻塞状态,直到被唤醒或等够了timeout指定的时间。注意:wait()等价于wait(0),它使得线程永远等待直到被唤醒为止。publicfinalvoidwait(longtimeout)throwsInterruptedExceptionpublicfinalvoidwait(longtimeout,intnanos)throwsInterruptedExceptionpublicfinalvoidwait()throwsInterruptedException(6)notify()方法和notifyAll()方法notify()方法和notifyAll()方法对应于唤醒操作。(7)suspend()方法和resume()方法suspend()方法和resume()方法配套使用,suspend()方法使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume()方法被调用,才能使得线程重新进入可执行状态。(8)interrupt()方法和interrupted()方法interrupt()方法为线程设置一个中断标记,以便于run()方法运行时使用isInterrupted()方法能够检测到,此时,线程在sleep()之类的方法中被阻塞时,由sleep()方法抛出一个InterruptedException异常,然后捕获这个异常以处理超时。(9)isAlive()方法isAlive()方法用来判断一个线程的run()方法是否还在执行,如果是在运行,则返回true,否则返回false。3.线程的创建(1)Thread类与Runnable接口Thread类在java.lang包中定义,Thread类的构造方法如下:(1)Thread()(2)Thread(Runnabletarget)(3)Thread(Runnabletarget,Stringname)(4)Thread(Stringname)(5)Thread(ThreadGroupgroup,Runnabletarget)(6)Thread(ThreadGroupgroup,Runnabletarget,Stringname)(7)Thread(ThreadGroupgroup,Stringname)任何实现Runable接口的对象对可以作为Thread类构造方法中的target参数,而Thread类本身也实现了Runable接口。因此,可以有2种方式提供run()方法来实现多线程。(2)继承Thread类实现多线程例通过继承Thread实现多