没有合适的资源?快使用搜索试试~ 我知道了~
Java 线程总结
5星 · 超过95%的资源 需积分: 9 37 下载量 124 浏览量
2010-12-21
16:12:23
上传
评论
收藏 483KB DOC 举报
温馨提示
试读
64页
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线程:大总结
资源推荐
资源详情
资源评论
操作系统中线程和进程的概念
现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程
序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在 系统中,
一个运行的 就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如
进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。“同时”执
行是人的感觉,在线程之间实际上轮换执行。
中的线程
在 中,“线程”指两件不同的事情:
、 类的一个实例;
、线程的执行。
使用 类或者 接口编写代码来定义、实例化和启动新线程。一个
类实例只是一个对象,像 中的任何其他对象一样,具有变量和方法,生死于堆上。 中,每个线程
都有一个调用栈,即使不在程序中创建任何新的线程,线程也在后台运行着。一个 应用总是从
方法开始运行,方法运行在一个线程内,它被称为主线程。一旦创建一个新的线程,就产生一个新
的调用栈。
线程总体分两类:用户线程和守候线程。
当所有用户线程执行完毕的时候, 自动关闭。但是守候线程却不独立于 ,守候线程一般是由操
作系统或者用户自己创建的。
定义线程
、扩展 类。
此类中有个 方法,应该注意其用法:
如果该线程是使用独立的 运行对象构造的,则调用该 对象的 方法;否则,该方
法不执行任何操作并返回。
的子类应该重写该方法。
、实现 接口。
使用实现接口 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的
方法。
方法 的常规协定是,它可能执行任何所需的操作。
实例化线程
、如果是扩展 类的线程,则直接 即可。
、如果是实现了 接口的类,则用 的构造方法:
!!
!!" #!
$ " !!
$ " !!" #!
$ " !!" #! " !%#&
启动线程
在线程的 对象上调用 !!方法,而不是 或者别的方法。
在调用 !!方法之前:线程处于新状态中,新状态指有一个 对象,但还没有一个真正的线程。
在调用 !!方法之后:发生了一系列复杂的事情
启动新的执行线程(具有新的调用栈);
该线程从新状态转移到可运行状态;
当该线程获得机会执行时,其目标 方法将运行。
注意:对 来说,方法没有任何特别之处。像 方法一样,它只是新线程知道调用的方法名称
和签名。因此,在 上或者 上调用 方法是合法的。但并不启动新的线程。
例子
、实现 接口的多线程例子
'((
( 实现 接口的类
(
( )! & **+,-,. +//*
('
0#! ! 1
! #! 2
0#!#! 1
! 3 2
4
1
5 ! 3 *2 6 72 88 1
5 % 3 *2 % 6 ********2 %88 2
#9!!! 8 :/ : 8 2
4
4
4
'((
( 测试 类实现的多线程程序
(
( )! & **+,-,. +/7/*
('
! 1
!! #!;< 1
0#! 3 0#!:阿三:2
0#! 3 0#!:李四:2
! 3 2
! 3 2
!!!2
!!!2
4
4
执行结果:
李四/ *
阿三/ *
李四/
阿三/
李四/
李四/ .
阿三/
李四/ =
阿三/ .
阿三/ =
> 5 ! ! *
、扩展 类实现的多线程例子
'((
( 测试扩展 类实现的多线程程序
(
( )! & **+,-,. +//.
('
! ! 1
!#! 1
2
4
1
5! 3 *2672881
5 %3 *2 % 6********2%882
#9!!!!!?8: /:82
4
4
!! #!;< 1
! 3 !:阿三:2
! 3 !:李四:2
!!!2
!!!2
4
4
执行结果:
阿三 /*
李四 /*
阿三 /
李四 /
阿三 /
李四 /
阿三 /.
阿三 /=
李四 /.
李四 /=
> 5 ! ! *
对于上面的多线程程序代码来说,输出的结果是不确定的。其中的一条语句 5 %3 *2 %
6********2%882是用来模拟一个非常耗时的操作的。
一些常见问题
、线程的名字,一个运行中的线程总是有名字的,名字有两个来源,一个是虚拟机自己给的名字,一个
是你自己的定的名字。在没有指定线程名字的情况下,虚拟机总会为线程指定名字,并且主线程的名字总
是 ,非主线程的名字不确定。
、线程都可以设置名字,也可以获取线程的名字,连主线程也不例外。
.、获取当前线程的对象的方法是:!;
=、在上面的代码中,只能保证:每个线程都将启动,每个线程都将运行直到完成。一系列线程以某种顺
序启动并不意味着将按该顺序执行。对于任何一组启动的线程来说,调度程序不能保证其执行次序,持续
时间也无法保证。
7、当线程目标 方法结束时该线程完成。
@、一旦线程启动,它就永远不能再重新启动。只有一个新的线程可以被启动,并且只能一次。一个可运
行的线程或死线程可以被重新启动。
A、线程的调度是 的一部分,在一个 B>C 的机器上上,实际上一次只能运行一个线程。一次只有一
个线程栈执行。 线程调度程序决定实际运行哪个处于可运行状态的线程。
众多可运行线程中的某一个会被选中做为当前线程。可运行线程被选择运行的顺序是没有保障的。
+、尽管通常采用队列形式,但这是没有保障的。队列形式是指当一个线程完成“一轮”时,它移到可运行队
列的尾部等待,直到它最终排队到该队列的 前端为止,它才能被再次选中。事实上,我们把它称为可运
行池而不是一个可运行队列,目的是帮助认识线程并不都是以某种有保障的顺序排列唱呢个一个队列的事
实。
-、尽管我们没有无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式。
要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型。线程栈是指某时刻时内存中线程调度
的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈
必须选择一个运行的时刻(实际上指代码运行到什么地方。
下面通过一个示例性的代码说明线程(调用)栈的变化过程。
剩余63页未读,继续阅读
资源评论
- major572012-03-20Java线程方面的内容讲的很全面,很有参考价值
- haradona20062014-03-21不错,总结的挺全面的,对我很有帮助
- 花宇心坊工作室2014-05-24对线程的讲解,非常的透彻,很好的揭示了线程的执行过程
蜗牛的彩色生活
- 粉丝: 38
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第33题搜索旋转排序数组.zip
- 基于Python实现的手写数字识别系统源码.zip
- 从网页提取禁止转载的文字
- C语言基础-C语言编程基础之Leetcode编程题解之第32题最长有效括号.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第31题下一个排列.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第30题串联所有单词的子串.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第29题两数相除.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第28题找出字符串中第一个匹配项的下标.zip
- 实验报告模板(1).docx
- C语言基础-C语言编程基础之Leetcode编程题解之第26题删除有序数组中的重复项.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功