Java多线程(Multithread)总结

来源:互联网 发布:网页淘宝怎么付钱 编辑:程序博客网 时间:2024/04/30 10:37
---------------------- android培训、java培训、期待与您交流! ----------------------


Java多线程(Multithread)总结

        多线程是指在单个程序(进程)中可以同时运行多个不同的线程执行不同的任务。线程是程序内的顺序控制流,只能使用分配给程序的资源和环境。其目的就是最大限度的利用CPU资源。CPU处理能力很强,但是网络的传输速率及本地文件系统资源的读写速度都远低于CPU的处理能力。用户输入也比计算机慢,因此CPU会有很多的空闲时间。多线程能使程序充分利用这些空闲时间。

        当程序启动运行时,就会自动产生一个主线程,主方法main就在这个线程上运行。Java通过run()方法为线程指明要完成的任务,可以继承Thread类来重写run方法,也可以实现runnable接口进而实现run方法。Thread类是专门用来创建线程和对线程进行操作的类,其定义了许多操作线程的方法。实现Runnable接口来实现run方法,并将它作为线程的目标对象来创建线程。

        要执行线程,就必须调用线程的start方法为线程分配必须的资源、调度线程运行并执行线程的run方法。线程的消亡不能靠调用stop命令,而是让run方法自然结束。


       线程生命周期包括:创建状态、可运行状态、不可运行状态、消亡状态。


     线程状态转换图:

            

创建状态:当用new操作符创建一个新的线程对象时,该线程处于处于创建状态,此时的线程只是一个空的线程,并未被分配资源。

可运行状态:执行start()方法为线程分配系统资源,安排其运行,并调用线程体——run()方法,此时的线程实际上并没有真正运行。

不可运行状态:发生如下事件时,运行状态的线程转到不可运行状态

调用了sleep()方法

线程调用wait()方法等待特定条件的满足

线程输入或输出阻塞

返回可运行状态:

睡眠状态的线程在指定的时间过去后

如果线程在等待某一条件,另一个对象必须调用notify()notifyAll()方法通知等待线程条件的改变

受输入或输出阻塞的线程,等待输入或输出完成后

消亡状态:run()方法自然执行后,线程自然消亡。


      设置线程的优先级方便了系统对线程的调度,优先级高的优先执行。但发生了一下事件,情况就不同了:

线程体中调用了yield()方法,让出对CPU的占用权

线程体中调用了sleep()方法,使线程进入睡眠状态

线程由于I/O操作而受阻塞

另一个更高优先级的线程出现

在支持时间片的系统中,该线程的时间片用完。

        

        线程的同步是为了防止多个线程同时访问一个有限的资源,而发生资源冲突。其具体办法就是在线程使用一个资源时为其加锁即可。在锁未被占用资源的线程释放前,其他线程不能再访问那个资源。通过synchronized关键字为资源加锁,详见http://blog.csdn.net/jhaizi/article/details/6754817


---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
原创粉丝点击