您的位置:首页 > 其它

线程的生命周期和线程的同步

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() 方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: