Java线程-线程池-条件变量

条件变量是Java5线程当中很重要的一个概念,顾名思义,条件变量就是条件当中的一种变量,这里的条件没有实际意义,仅仅是个标记而已。
条件变量都实现了java.util.concurrent.locks.Condition接口,条件对象的实例化是通过一个lock对象上调用newCondition()方法来获取的,这样条件就和一个锁对象绑定起来,Java当中的条件变量只能和锁配合使用,来控制并发程序访问竞争资源的安全。
条件变量的出现是为了更精细的控制线程的等待和唤醒,Java5之前,线程的等待与唤醒靠的是Object对象的wait()、notify和notifyAll()方法,这样的处理不够精细。
在Java5当中,一个锁可以有多个条件,每个条件上可以有多个线程等待,通过调用await()方法,可以使线程在该条件下进行等待。当调用了signalAll(),又可以唤醒该条件下等待的线程。
条件变量比较抽象,它不是自然语言当中的条件概念,它是控制程序的一种有效手段。
代码如下:

public class Main {
    public static void main(String args[]){
        //创建并发访问的账户
        MyCount myCount=new MyCount("370911199212233321",10000);
        //创建一个线程池
        ExecutorService executorService= Executors.newFixedThreadPool(2);
        //创建六个线程
        Thread thread1=new SaveMoneyThread("张三",myCount,1000);
        Thread thread2=new DrawMoneyThread("王五",myCount,5000);
        Thread thread3=new SaveMoneyThread("赵六",myCount,2000);
        Thread thread4=new SaveMoneyThread("李四",myCount,1000);
        Thread thread5=new DrawMoneyThread("吴京",myCount,8000);
        Thread thread6=new SaveMoneyThread("狗子",myCount,7000);
        Thread thread7=new DrawMoneyThread("王二麻子",myCount,9000);
        //执行各个线程
        executorService.execute(thread1);
        executorService.execute(thread2);
        executorService.execute(thread3);
        executorService.execute(thread4);
        executorService.execute(thread5);
        executorService.execute(thread6);
        executorService.execute(thread7);
        //关闭线程池
        executorService.shutdown();
    }

}

class MyCount {
    private String oid;                                 //账号
    private int cash;                                   //账户余额
    private Lock lock=new ReentrantLock();              //锁
    private Condition saveCondition=lock.newCondition();//存款条件
    private Condition drawCondition=lock.newCon
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值