Java多线程(Multithread)总结
来源:互联网 发布:网页淘宝怎么付钱 编辑:程序博客网 时间:2024/04/30 10:37
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
详细请查看:http://edu.csdn.net/heima
- Java多线程(Multithread)总结
- C++ windows multithread 多线程编程(一)
- Java multithread
- 多线程 MultiThread.cpp
- Python 多线程 multithread
- 多线程基本概论multithread
- Python中的多线程MultiThread
- MD(多线程DLL)和MT(MultiThread…
- Java MultiThread学习笔记
- java multithread之join
- Java Memory Model & multithread-programming
- Java多线程(总结)
- C/C++ 多线程(MultiThread)编程及几种同步方式
- java多线程总结(一)
- java多线程总结(二)
- Java 多线程 (并发)总结
- Java 多线程 (并发)总结
- java多线程总结 (一)
- android平台出现网络不可达及DeviceMonitor: Connection
- Flash(as3.0) CSound
- 浅谈系统性
- mac os之TextMate安装与配置
- Myspace六次重构经验教你打造分布式系统
- Java多线程(Multithread)总结
- Flash(as3.0) CScreen
- 并发处理模型, 从 Reactor 到 Coproc
- eclipse 自动生成java UML 图
- wubi安装ubuntu,直接删掉安装文件夹,导致不能再次安装解决办法。
- Javascript的匿名函数
- 网络IO模型
- 嵌入式Linux C笔试题积累
- 网站加速--服务器编写篇