关于Java(8)

关于Java(8)

  1. FutureTask类有什么作用?它实现了哪些接口?Callable接口和Runnable接口有什么不同?
    作用:
    1.是runnable的实现
    2.它的构造参数接受callable
    3.并且有泛型定义,记录任务的执行结果
    4.get方法可以获取callable任务的执行结果,如果任务执行完直接返回结果,任务还没执行完,调用线程会阻塞线程直至get返回结果
    不同之处:callable可以携带返回值,泛型,可以抛出异常,callable的方法名是call,runnable方法名是run。
  2. volatile关键字有什么作用?
    1.多线程之间可见性。
    2.禁止指令重排序。
  3. Java提供了哪些同步机制来实现互斥?
  • 对象监视器(monitor)与synchronized
    Synchronized的三种用法:
    synchronized 代码块:监视器就是指定的对象。
    synchronized 方法:监视器就是this对象。
    synchronized 静态方法:监视器就是相应的Class对象。
  • Java并发包中的锁类
    接口
    ReentrantLock类
  1. 编写Java程序模拟烧水泡茶最优工序。
    在这里插入图片描述
    (图源Java课PPT)

  2. 请使用Java并发包的Lock及Conditon改写例9.11。

  • 存钱
void put(int i) {
     lock.lock(); //使用锁取代同步方法
     try{ 
         while(isMoney){
             try{ 
                 SaveCondition.await(); //存钱线程等待
             } catch(Exception e){}
         }
         value = value + i; 
         System.out.println("存入"+i+" 账上金额为:"+value);
         isMoney = true;//设置标志
         FetchCondition.signal(); //唤醒等待资源的取钱线程
         } finally {
             lock.unlock();
         }
}
  • 取钱
int get(int i) { 
    lock.lock(); 
    try{
        while(!isMoney ){
           try { 
               FetchCondition.await(); //取钱线程等待
           } catch(Exception e){}
        }
        if (value>i)
            value = value - i;         
         else {  
            i = value;
            value = 0; }
         System.out.println("取走"+i+" 账上金额为:"+value);
         isMoney = false;
         SaveCondition.signal(); //唤醒等待资源的存钱线程
         return i;                      
        } finally {
               lock.unlock();}
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值