线程的生命周期和线程的同步
2011-09-06 18:41
134 查看
1、 新建状态。 当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。
2、 就绪:线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源
3、 运行:线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。
4、 死亡 :自然终止:正常运行run()方法后终止
异常终止:调用stop()方法让一个线程终止运行
5、 堵塞
a) Sleep() 将程序睡眠。 当时间到了。恢复到就绪状态
b) Wait() 调用motify()(唤醒线程)方法回到就绪状态
c) Suspend() 被另一个线程所阻塞 resume()方法恢复
6、 线程的优先级
a) 把线程从就绪状态进入运行状态的过程叫做线程调度,负责调度工作的机构叫做调度管理器
b) 优先级 线程的优先级的取值范围是1—10
i. MAX_PRIORITY
ii. NORM_PRIORITY
iii. MIN_PRIORITY
iv. 得到货修改线程的优先级 final intgetPriority() final voidsetPriority(int newPriority)
7、 常用方法 run() start() sleep(long t) sleep(long millis,int nanos) nanos参数为有纳秒
a) Yield() 暂停线程,让步的方法 当前线程进入就绪状态,不是堵塞状态。
b) Join() 方法 让线程加入执行,执行某一线程join方法的线程会被冻结,等待某一线程执行结束,该线程才会恢复到可运行状态
c) Wait() 与notify() 方法 是成对。 暂停和恢复
d) interrupt(): 清楚线程的冻结状态 强制清楚
e) stop() 有风险,终止。已过时
停止方法: 1。在循环设置标志,判断用break跳出循环
2.线程处于堵塞状态, interrupt() 中断线程interrupted()测试是否中断。在第一次调用已清除了其中断状态之,且第二次调用检验完中断状后态前,当前线程再次中断的情况除外,如果连续两次调用该方法,则第二次调用将返回 false isIterrupted() 此时线程是否已经中断,线程的中断状态不受该方法的影响。
f) isAlive() 判断是否为活动的线程。
g) setDaemon(true) 该方法要在线程开启前使用, 和前台线程一样开启,病抢资源运行。所不同的是,当前台线程都结束 后,后台线程会自动结束。无论后台线程处于什么状态都会自动结束
h) currentThread() 获取到当前的线程对象 然后 t1.getName() 获得线程名字
9、线程的同步 Synchronization
互斥锁 标记,这个标记用来保证在任一时刻,只能有以个线程访问该对象 关键字 synchronized 用来与对象的互斥锁联系
加锁方式 synchronized(this){} 在方法声明中,表示整个方法为同步方法
Publicsynchronized char pop(){} 同步方法只有一个。
锁的是对象。
好处 解决了线程安全问题
弊端 降低了运行效率
同步嵌套,容易出现死锁。
解决死锁 wait() 方法
2、 就绪:线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源
3、 运行:线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。
4、 死亡 :自然终止:正常运行run()方法后终止
异常终止:调用stop()方法让一个线程终止运行
5、 堵塞
a) Sleep() 将程序睡眠。 当时间到了。恢复到就绪状态
b) Wait() 调用motify()(唤醒线程)方法回到就绪状态
c) Suspend() 被另一个线程所阻塞 resume()方法恢复
6、 线程的优先级
a) 把线程从就绪状态进入运行状态的过程叫做线程调度,负责调度工作的机构叫做调度管理器
b) 优先级 线程的优先级的取值范围是1—10
i. MAX_PRIORITY
ii. NORM_PRIORITY
iii. MIN_PRIORITY
iv. 得到货修改线程的优先级 final intgetPriority() final voidsetPriority(int newPriority)
7、 常用方法 run() start() sleep(long t) sleep(long millis,int nanos) nanos参数为有纳秒
a) Yield() 暂停线程,让步的方法 当前线程进入就绪状态,不是堵塞状态。
b) Join() 方法 让线程加入执行,执行某一线程join方法的线程会被冻结,等待某一线程执行结束,该线程才会恢复到可运行状态
c) Wait() 与notify() 方法 是成对。 暂停和恢复
d) interrupt(): 清楚线程的冻结状态 强制清楚
e) stop() 有风险,终止。已过时
停止方法: 1。在循环设置标志,判断用break跳出循环
2.线程处于堵塞状态, interrupt() 中断线程interrupted()测试是否中断。在第一次调用已清除了其中断状态之,且第二次调用检验完中断状后态前,当前线程再次中断的情况除外,如果连续两次调用该方法,则第二次调用将返回 false isIterrupted() 此时线程是否已经中断,线程的中断状态不受该方法的影响。
f) isAlive() 判断是否为活动的线程。
g) setDaemon(true) 该方法要在线程开启前使用, 和前台线程一样开启,病抢资源运行。所不同的是,当前台线程都结束 后,后台线程会自动结束。无论后台线程处于什么状态都会自动结束
h) currentThread() 获取到当前的线程对象 然后 t1.getName() 获得线程名字
9、线程的同步 Synchronization
互斥锁 标记,这个标记用来保证在任一时刻,只能有以个线程访问该对象 关键字 synchronized 用来与对象的互斥锁联系
加锁方式 synchronized(this){} 在方法声明中,表示整个方法为同步方法
Publicsynchronized char pop(){} 同步方法只有一个。
锁的是对象。
好处 解决了线程安全问题
弊端 降低了运行效率
同步嵌套,容易出现死锁。
解决死锁 wait() 方法
相关文章推荐
- 线程的生命周期与线程的同步
- 课堂笔记--线程的生命周期及同步
- 线程的生命周期、线程的同步
- 黑马程序员——JAVA基础——线程---概述,创建、生命周期,控制,同步,线程通信
- 13.3 线程的生命周期 13.4 线程的同步
- 两种创建线程的方式/线程的生命周期及各自使用同步锁时的区别
- 线程状态、sql限定查询、servlet生命周期、Spring理解、
- 线程间的通信、同步方式、进程间通信方式
- iOS两个线程间嵌套发送同步消息
- iOS 单例写法以及 App生命周期线程
- MySQL半同步复制-答疑解惑-master dump线程等待slave的ACK是死等吗
- JAVA线程同步中wait()和notify()简洁例子
- Thread and Sync In C# (C#中的线程与同步)
- 多线程编程之四——线程的同步
- java 线程数据同步
- java线程同步
- windows编程点滴(四)之线程的同步
- win32 线程的互斥和同步
- Java多线程(5) 线程的同步-下
- 线程实用解析---------(三)线程的同步