没有合适的资源?快使用搜索试试~ 我知道了~
Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java线程:新特征-信号量 Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:大总结
资源推荐
资源详情
资源评论
Java 多线程编程总结
2007-05-17 11:21:59
标签:java多线程
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究
法律责任。http://lavasoft.blog.51cto.com/62575/27069
Java 多线程编程总结
下面是 Java 线程系列博文的一个编目:
Java
线程:概念与原理
Java
线程:创建与启动
Java
线程:线程栈模型与线程的变量
Java
线程:线程状态的转换
Java
线程:线程的同步与锁
Java
线程:线程的交互
Java
线程:线程的调度 - 休眠
Java
线程:线程的调度 - 优先级
Java
线程:线程的调度 - 让步
Java
线程:线程的调度 - 合并
Java
线程:线程的调度 - 守护线程
Java
线程:线程的同步 - 同步方法
Java
线程:线程的同步 - 同步块
Java
线程:并发协作 - 生产者消费者模型
Java
线程 :并发协作 - 死锁
Java
线程: volatile
关键字
Java
线程:新特征 - 线程池
Java
线程:新特征 - 有返回值的线程
Java
线程:新特征 - 锁(上)
Java
线程:新特征 - 锁(下)
Java
线程:新特征 - 信号量
Java
线程:新特征 - 阻塞队列
Java
线程:新特征 - 阻塞栈
Java
线程 :新特征 - 条件变量
Java
线程:新特征 - 原子量
Java
线程:新特征 - 障碍器
Java
线程:大总结
-------------------------------------------------------------------------------------------------
下面的内容是很早之前写的,内容不够充实,而且是基于 Java1.4 的内容,Java5 之后,
线程并发部分扩展了相当多的内容,因此建议大家看上面的系列文章的内容,与时俱进,
跟上 Java 发展的步伐。
-------------------------------------------------------------------------------------------------
一、认识多任务、多进程、单线程、多线程
要认识多线程就要从操作系统的原理说起。
以前古老的 DOS 操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能
做一件事情。比如你在 copy 东西的时候不能 rename 文件名。为了提高系统的利用效率,
采用批处理来批量执行任务。
现在的操作系统都是多任务操作系统,每个运行的任务就是操作系统所做的一件事情,比
如你在听歌的同时还在用 MSN 和好友聊天。听歌和聊天就是两个任务,这个两个任务是
“同时”进行的。一个任务一般对应一个进程,也可能包含好几个进程。比如运行的 MSN 就
对应一个 MSN 的进程,如果你用的是 windows 系统,你就可以在任务管理器中看到操作
系统正在运行的进程信息。
一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有些会启动多个进程。
启动进程的时候,操作系统会为进程分配资源,其中最主要的资源是内存空间,因为程序
是在内存中运行的。在进程中,有些程序流程块是可以乱序执行的,并且这个代码块可以
同时被多次执行。实际上,这样的代码块就是线程体。线程是进程中乱序执行的代码流程。
当多个线程同时运行的时候,这样的执行模式成为并发执行。
多线程的目的是为了最大限度的利用 CPU 资源。
Java 编写程序都运行在在 Java 虚拟机(JVM)中,在 JVM 的内部,程序的多任务是通过
线程来实现的。每用 java 命令启动一个 java 应用程序,就会启动一个 JVM 进程。在同一
个 JVM 进程中,有且只有一个进程,就是它自己。在这个 JVM 环境中,所有程序代码的运
行都是以线程来运行。
一般常见的 Java 应用程序都是单线程的。比如,用 java 命令运行一个最简单的
HelloWorld 的 Java 应用程序时,就启动了一个 JVM 进程,JVM 找到程序程序的入口点
main(),然后运行 main()方法,这样就产生了一个线程,这个线程称之为主线程。当
main 方法结束后,主线程运行完成。JVM 进程也随即退出 。
对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,
操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信
很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。
实际上,操作的系统的多进程实现了多任务并发执行,程序的多线程实现了进程的并发执
行。多任务、多进程、多线程的前提都是要求操作系统提供多任务、多进程、多线程的支
持。
在 Java 程序中,JVM 负责线程的调度。线程调度是值按照特定的机制为多个线程分配
CPU 的使用权。
调度的模式有两种:分时调度和抢占式调度。分时调度是所有线程轮流获得 CPU 使用权,
并平均分配每个线程占用 CPU 的时间;抢占式调度是根据线程的优先级别来获取 CPU 的
使用权。JVM 的线程调度模式采用了抢占式模式。
所谓的“并发执行”、“同时”其实都不是真正意义上的“同时”。众所周知,CPU 都有个时钟频
率,表示每秒中能执行 cpu 指令的次数。在每个时钟周期内,CPU 实际上只能去执行一条
(也有可能多条)指令。操作系统将进程线程进行管理,轮流(没有固定的顺序)分配每
个进程很短的一段是时间(不一定是均分),然后在每个线程内部,程序代码自己处理该
进程内部线程的时间分配,多个线程之间相互的切换去执行,这个切换时间也是非常短的。
因此多任务、多进程、多线程都是操作系统给人的一种宏观感受,从微观角度看,程序的
运行是异步执行的。
用一句话做总结:虽然操作系统是多线程的,但 CPU 每一时刻只能做一件事,和人的大脑
是一样的,呵呵。
二、Java 与多线程
Java 语言的多线程需要操作系统的支持。
Java 虚拟机允许应用程序并发地运行多个执行线程。Java 语言提供了多线程编程的扩展
点,并给出了功能强大的线程控制 API。
剩余63页未读,继续阅读
资源评论
sawxb
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功