您的位置:首页 > 其它

多线程总结2(死锁等问题)

2013-08-29 23:01 281 查看
线程间通讯:

其实就是多个线程操作同一个资源

但是操作动作不同

处理安全问题:

1,同步处理

2,使用同一个锁

 

(视频3)等待唤醒机制:

wait()等待,notify()唤醒,等都必须在同步中(锁)进行。

因为要对持有监视器(锁)的线程操作,所以要使用在同步中,因为只有同步才具有锁

为什么这些操作线程的方法要定义Object类中呢?

因为这些方法在操作同步中线程时,都必须要表示他们所才做线程的只有锁,

只有同一个锁上的被等待线程,可以被同一个锁上notify唤醒,

不可以被不同锁中的线程进行唤醒。

也就是说,等待和唤醒必须是同一个锁。

而锁可以是任意对象,所以可以被任意对象调用的方法定义Object类中

(视频4)当出现2个以上线程时,则用IF判断无法满足,必须要用while判断,并且用nodifyAll()来唤醒其他线程。当苏醒时如果用if则直接往下执行,如果用while 则需要返回在判断一次。如果使用while 判断时只单单使用nodify()唤醒最早被wait()的线程时,如果是本类线程则会导致全部挂起状态。

JDK1.5中提供了多线程升级解决方案,

将同步Synchronized替换成现实 Lock操作。

将Object中的wait,notify notifyAll,替换成了Condition对象。

该对象可以Lock锁,进行获取。

该实例中,实现了本方唤醒对方操作。

stop方法已经过时。

如何停止线程?

只有一种,run方法结束。

开启多线程运行,运行代码通常是循环结构。

只要控制住循环,就可以让run方法结束,也就是线程结束。

当没有指定的方式让冻结的线程回复到运行状态时,这时需要对冻结进行清除。

强制让线程回复到运行状态中来

join:

当A线程执行到了B线程的.join()方法时,A就会等待,等到B线程都执行完,A才会执行。

join可以用来临时加入线程执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: