java多线程总结笔记4——线程互斥与同步

来源:互联网 发布:淘宝客案例省钱快报 编辑:程序博客网 时间:2024/05/22 09:38

线程互斥

 线程互斥靠synchronized关键字来实现。

synchronized(钥匙){互斥区代码}

只有拿到了钥匙才可以进入互斥区代码。

任何对象都可以作为钥匙,不过为了让代码看起来更有意义,一般就将互斥资源作为钥匙。


线程同步

线程同步靠Object类的wait/notify函数来实现,这两个函数只能出现在synchronized的花括号内。

钥匙.wait()使得线程放弃钥匙,然后睡眠等着钥匙,没有其他线程叫它的话它是不会醒的。当然,睡眠时是不会抢钥匙的,所以永远也得不到钥匙。

如果是钥匙.wait(ms)或钥匙.wait(ms,ns)的话,就算没有其它线程叫,时间到了也会自己醒来。

钥匙.notify()使得一个睡眠等着钥匙的线程醒来,以便它可以去抢钥匙然后继续执行剩余的互斥区代码。钥匙.notifyAll()可以叫醒所有睡眠等待钥匙的线程。



0 0