黑马程序员---多线程学习

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

13.多线程:sleepwait去别:执行权:正在被cpu处理;执行资格:可以被cpu处理,在处理队列中排队

wait:可指定等待的时间,不指定须由notifynotifyAll唤醒。

         线程会释放执行权,且释放锁。

sleep:必须制定睡眠的时间,时间到了自动处于临时(阻塞)状态。

         即使睡眠了,仍持有锁,释放执行权,cpu可以处理其他线程。

同步的好处:解决了线程的安全问题

同步的弊端:相对降低了效率,同步都会判断同步锁

同步的前提:同步中必须有多个线程并使用同一个锁

同步函数:用synchronized作为函数的修饰符,对需要的功能用函数封装后同步。同步函数使用的锁是this

同步函数和同步代码块的去别:同步函数的锁是固定的this,同步代码块的锁是任意对象。建议使用同步代码块。静态的同步函数使用的锁是:该函数所属字节码文件对象,可以使用getClass方法获取,也可以使用当前类名.class表示

死锁:1.同步的嵌套可能导致死锁。

jdk1.5以后将同步和锁封装成了对象。并将操作锁的隐式方式定义到了该对象中,将隐式动作变成了显示动作。

Lock接口:出现替代了同步代码块或者同步函数。将同步的隐式锁操作变成现实锁操作。

同时更为灵活。可以一个锁上加上多组监视器。

lock():获取锁。

unlock():释放锁,通常需要定义finally代码块中。

等待/唤醒机制涉及的方法:

1wait():让线程处于冻结状态,被wait的线程会被存储到线程池中。

2notify():唤醒线程池中一个线程(任意).

3notifyAll():唤醒线程池中的所有线程。

这些方法都必须定义在同步中。因为这些方法是用于操作线程状态的方法。必须要明确到底操作的是哪个锁上的线程。

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值