java 多线程

1 概述

对操作系统而言,每个应用程序都是一个独立的进程。
进程是一个可并发执行的具有独立功能的应用程序,是操作系统进行资源分配和调度的基本单位。
操作系统将CPU执行时间划分为许多细小的时间片段,使得每个进程都有机会获得自己的时间片段,由于计算机的执行速度非常快,使得程序看起来好像是同时运行一样。实际上某个时间节点上,一个CPU中运行的进程其实只有一个。
将一个进程内部运行的每个任务都都称为一个线程。一个进程内可以拥有多个并发执行的线程,称为多线程。线程机制是把进程的独立分配资源和被调度分派执行两项基本功能分离,前一项由进程完成后一项由线程完成。这些线程共享一块内存空间和一组系统资源。
线程是操作系统中能独立执行的实体(控制流),是处理器进行调度和分派的基本单位,是进程的组成部分。
同一个进程中的所有线程共享进程获得的主储存空间和资源。

2 多线程的创建

Java.lang.Thread类用于创建和控制线程。
两种方法编写支持多线程的应用程序:
1 直接继承Thread类。
	步骤:a 定义一个线程类,该类继承Thread类并重写其中的run方法。
	b 创建这个线程类的实例对象,调用其中的start方法以新线程的方式开始运行。
2 实现Runnable接口。
	a 定义一个实现Runnable接口,在该类中编写public void run方法的实现代码。
	b 用该类的一个对象作为参数构造Thread类的实例对象,然后调用此实例对象的的start方法运行线程
采用哪种方法要视情况而定:java不允多重继承,因此当一个类已经继承了另一个类时就只能使用第二种方法。

3 线程的调度与控制

线程的执行顺序取决于线程的优先级,优先级越高越优先执行。
MAX_PRIORITY:线程具有最大优先级,默认值10。
NORM_PRIORITY:线程具有最大优先级,默认值5。
MIN_PRIORITY:线程具有最大优先级,默认值1。
优先级默认为·由NORM_PRIORITY标识的整数。
可以通过setPriority方法设置线程的优先级,也可以通过getPriority方法获得线程的优先级。
java的线程调度策略是一种基于优先级的抢占式调度策略。优先级低的线程执行过程中来了个优先级高的线程,则高优先级线程不必等待低优先级线程执行结束,直接把控制权抢占过来。
sleep方法:强迫高优先级的线程休眠一段时间(时间是1/1000的整数倍),将执行机会给到低优先级的线程。
yield方法:可以提前释放CPU资源,允许具有其他相同优先级的线程执行。
join方法:可使当前线程等待某一线程执行完毕后再执行。xxx.join()
isAlive方法:可以判断某个线程是否执行完毕。
stop方法:强制终止某个线程的执行。(容易造成执行结果的不确定性,不建议使用。)
suspend方法和resume方法:前者使线程暂停后者使线程恢复执行。

4 线程之间的互斥关系

并发线程之间可能是无关的也可能是相关的。
无关的并发线程是指他们分别在不同的变量集合上操作,一个线程的执行与其他并发线程的执行速度无关,即一个并发线程不会改变另一个并发线程可能用到的变量值。
相关的并发线程只他们共享某些变量,一个线程的执行可能影响到其他线程的执行结果,相关并发线程之间具有制约关系。
相关线程并发执行时相互之间会干扰或影响到其他线程的执行结果,因此线程之间需要有管理和约束机制。
为了解决线程之间存在的资源竞争关系,可以使用互斥锁。
共享变量代表的资源称为临界资源,并发线程中与共享变量有关的程序段称为临界区。
在Java语言中为了保证线程对共享资源操作的完整性,用synchronized关键字为临界资源加锁来解决。每一个使用该关键字的临界资源都有一个互斥锁标记,JVM保证任意时刻只能有一个线程访问该对象。
格式:
	synchronized(object){
		代码段
	}
如果存在储存资源访问冲突,锁定的代码应尽量少,尽量不要包含有循环类型的语句。

5 线程之间的协作关系

线程之间还有相互协作关系。
当多个线程为了完成同一任务而分工协作时,他们彼此之间有联系,知道其它线程的存在,而且受到其他线程的影响。
Java语言提供wait和notify两个方法供协作间的线程使用。
使用wait,该线程进入等待状态并暂时释放临界资源对象的锁,使其他线程可以获得该对象的锁,对数据进行操作。
使用notify,可以使正在等待的线程重新占有锁并运行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值