黑马程序员技术交流社区
标题:
多线程小结
[打印本页]
作者:
wumuzhong
时间:
2013-9-29 16:13
标题:
多线程小结
1 进程与线程
进程是程序的一次动态执行过程,是系统进行资源分配和调度的一个独立单位。
线程是进程执行过程中产生的执行线索,是比进程单位更小的执行单位。
2 单线程与多线程
单线程的程序只有一个顺序执行流,只能依次向下执行每行代码,当某行代码遇到阻塞就会停滞不前。
多线程的程序有多条顺序执行流,当某的线程在阻塞状态时,别的线程会抢占cpu资源来运行,多线程抢占执行权是随机性的。
3 线程的创建
通过继承Thread类创建线程
步骤:1 定义类继承Thread类
2 重写Thread类的run方法
3 调用线程的start方法来启动线程
通过实现Runnable接口创建线程
步骤:1 定义类实现Runnable接口
2 重写Runnable接口的run方法
3 声明并初始化实现Runnable接口子类对象
4 声明Thread类对象,将实现Runnable接口对象作为实参来实例化Thread类对象
5 调用Thread类对象的start方法启动线程
4 实现Runnable方法比继承Thread常用原因
1 Runnable方式避免了Thread类方式单继承的局限性,可以继承其他类
2 Runnable方式可以使多个线程共享同一个资源文件
5 线程的生命周期
1 New :新建状态,当用new创建一个线程,就处于新建状态
2 Runnable :就绪状态,当调用start方法,就处于就绪状态,但此时,并一定开始运行了,只是表示可以有运行资源,还要JVM里线程调度器的调度
3 Running:运行状态,执行线程体
4 Blocked:阻塞状态,是指暂停线程的执行以等待某个条件的发生
5 dead:死亡状态,线程结束就处于死亡状态。
6 Lock:锁定状态,同步加锁,在对共享资源的访问机制
6 控制线程方法
1 void join():等待该线程终止
当执行流调用其他线程的join方法,调用线程将被阻塞,直到join线程完成为止
2 void setDaemon(boolean on):将该线程标记为守护线程或用户线程
也称为后台线程,当前台所有线程死亡时,被设置为后台线程随之死亡
3 static void sleep(long millis):在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
4 static void yield():暂停当前正在执行的线程对象,并执行其他对象
只是放弃了执行权,但还是在就绪状态,当再次抢到执行权,还是可以继续执行的
5 void setPriority(int newPriority):更改线程的优先级
参数为:Thread.MAX_PRIORITY 最高优先级,10级
Thread.MIN_PRIORITY 最低优先级,1级
Thread.NORM_PRIORITY 默认优先级,5级
7 线程同步
线程同步是指当多个线程操作同一个资源时因为延迟之类问题引起信息安全问题
实现线程同步方式:
1 同步代码块
在代码块上加上“synchronized“关键字,格式如下:
synchronized (同步对象){
......//需要同步的代码
}
2 同步方法
使用”synchronized“关键字将一个方法声明成同步方法,格式如下:
synchronized 方法返回值 方法名称(参数列表){}
8 死锁
当两个线程相互等待对方释放同步监视器是就会发生死锁,当发生死锁,所有线程处于阻塞状态,无法继续执行
9 线程通信
当线程在运行是,线程的调度具有一定的随机性和透明性,程序通常无法准确控制线程的轮换执行,但是可以通过一些机制俩保 证线程协调运行
1 可以借助Object类提供的wait(),notify()和notifyAll()三个方法
wait():
让当前线程放弃监视器进入等待,直到其他线程调用同一个监视器并调用
notify()
或
notifyAll()
为止。
notify():
唤醒在同一对象监听器中调用
wait
方法的第一个线程。
notifyAll():
唤醒在同一对象监听器中调用
wait
方法的所有线程。
2 可以通过同步锁机制Lock类提供的awit(),signal()和signalAll()方法
await():
等价于同步监听器的
wait()
方法
;
signal():
等价于同步监听器的
notify()
方法
;
signalAll():
等价于同步监听器的
notifyAll()
方法
;
作者:
wumuzhong
时间:
2013-9-29 16:15
坐个沙发的哦
作者:
千年白狐
时间:
2013-9-29 16:50
说的挺不错的,简单明了
作者:
乔兵
时间:
2013-9-29 16:56
感谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2