文档介绍:第13章多线程
线程
创建线程
线程的状态
共享资源
习题
线程
程序的一次执行过程称为一个进程。进程是一个“自包含”的运行程序,有自己专用的内存地址。
线程是指一个程序中可以独立运行的片断,是进程中的一个单一而连续的控制流程。
一个进程可以包含多个线程,每个线程独立运行以执行特定的任务,而且同一进程内的多个线程间共享相同的内存。
创建线程
定义Thread类的子类
实现Runnable接口
定义Thread类的子类
Thread:
run()
//在子类中必须覆盖以说明线程自身的具体操作
start()
//启动当前线程。它会为线程进行特殊的初始化,然后自动//调用当前线程的run()方法
例13-1 定义Thread类的子类
源代码
运行
实现Runnable接口
实现Runnable接口,即定义其中惟一方法run()的具体操作。此后,程序在需要创建线程时,只需以这个实现了Runnable接口的类的对象为参数创建Thread类的对象。
例13-2 实现Runnable接口
源代码
运行
线程的状态
新建
可运行
阻塞
结束
创建
start()
yield()
CPU时间片到
sleep()
wait()
suspend()
I/O block
...
notify()
notifyAll()
resume()
I/O unlock
...
run()结束
stop()
线程的状态(续)
新建状态
可运行状态
阻塞
结束
例13-3 线程的状态
源代码
运行
共享资源
线程同步
等待与通知
死锁
线程同步
多线程环境下,资源可以共享,因此可能存在两个或多个线程同时使用某一资源,从而造成资源冲突的情况。
例13-4 演示资源冲突
源代码
运行
线程同步(续)
同步机制通过给对象加锁来防止多个线程同时访问某对象。要实现线程同步,通常需要将某些方法声明为同步的(synchronized)。当程序调用任意同步方法时,如果该方法不是类方法,调用该方法的对象便会被锁定,该对象的所有同步方法都无法再被调用,直至第1个同步方法执行完毕并解除锁定;如果该方法是类方法,该方法所属类的所有对象都会被锁定,从而可以避免类变量被通过该类的不同对象同时访问。