Java-blog-08

一.FutureTask类有什么作用?它实现了哪些接口?Callable接口和Runnable接口有什么不同?

  • 实现了Runnable , Future , RunnableFuture 接口

    • FutureTask 实现了 RunnableFuture 接口,而 RunnableFuture 分别继承了 Runnable 和 Future 接口
  • 既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值,拿到线程执行的结果。

二.请查阅JDK自学线程池的相关类,如ThreadPoolExecutor构造器各个参数的意义,利用线程池编写多线程程序。

  • corePoolSize:最大核心线程数
  • maximumPoolSize:最多线程数
  • keepAliveTime:空闲线程的活跃时间
  • TimeUnit 时间单位
  • BlockingQueue 任务队列
  • ThreadFactory 线程工厂
  • RejectStrategy 拒绝策略
  • Abort 抛异常

三.volatile关键字有什么作用?

  • 保证了不同线程对这个变量进行操作时的可见性,
  • 禁止指令重排序优化

四.Java提供了哪些同步机制来实现互斥?

  • Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问。
  • JVM 实现的 synchronized。
  • JDK 实现的 ReentrantLock。

五.编写Java程序模拟烧水泡茶最优工序。

在这里插入图片描述

六.请使用Java并发包的Lock及Condition改写例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();}
   }


七.编写一个多线程Java应用模拟生产者/消费者模型,各产生10个生产者和消费者线程,共享一个缓冲区队列(长度自设),生产者线程将产品放入到缓冲区,消费者线程从缓冲区取出产品。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值