在多线程中,1.5版本之前,我们都使用同步代码块或者同步方法来解决线程安全问题
比如:
同步代码块
synchronized(锁对象){</p>
<pre><code>功能代码;
}
同步方法
public synchronized void test(){
功能代码;
}
在1.5版本,在java的工具类包中,java.util.concurrent.locks 中,推出了最新的
解决线程安全的方法,就是Lock+Condition的方式,
那这两种方式之间的关系和区别是什么呢?
加入对于线程常见的生产者消费者模式,我们使用两种方式实现,来看看他们的区别:
第一种,使用synchronized
我们完成一个男人挣钱女人花的例子
需求是如果没钱,男人线程挣一次钱,等待,然后唤醒女人去花钱,花完钱,等待,唤醒
男人去挣钱,一直循环这个过程,将男人线程看做生产线程,女人线程看做消费线程。
代码如下:
//首先完成共享数据
class Person{
String name;
boolean isMoney=true;
//挣钱
public void zhengQian(){
synchronized(this){
while(!isMoney){
try{wait(