多线程精华,面试专用
发布日期:2021-10-19 19:33:13 浏览次数:2 分类:技术文章

本文共 1791 字,大约阅读时间需要 5 分钟。

注意:部分代码为伪代码,注意虚假唤醒和死锁,对于同步快,使用同步集合类!!!
一,定义线程的方式
  a,extends Thread
  b,implements    Runnable
二,产生线程的方法
  a,new Thread().start();
  b, Executors.newFixedThreadPool(10).execute(new Runnable(){...});
  c, Executors.newCachedThreadPool().execute(new Runnable(){...});
  d, Executors.newScheduledThreadPool(10).schedule(new Runnable(){...})
  e, Executors.newSingleThreadExecutor(10).execute(new Runnable(){...})//可替补单线程
三,实现同步的方式
  a,synchronized 关键字
  b, new Semaphore(1); //信号灯还可以控制并发数量,
  c, Lock lock = new ReentrantLock();
  d, ReadWriteLock lock = new ReentrantLock();
     注意:1,高并发时,防止重入,应循环检查当前状态
          2, 在写锁释放前lock读锁,会将写锁降级为读写锁
      3,  无论如何,最终需要释放锁
四,线程间通信的方式
  a,this.wait(); this.notify()/this.notifyAll()
  b, new BlockingQueue(1),new BlockingQueue(1);
     //可使用阻塞队列来实现,因为其put(...)和take()均为阻塞方法
  c, condition1 = new ReentrantLock().new Condition();
     condition2 = new ReentrantLock().new Condition();
     condition1.await();  ..执行过程....    condition2.signal();    
五,线程内数据共享:
    ThreadLocal<ThreadScopeSharedData> map = new ThreadLocal<ThreadScopeSharedData>();
    建议:本地线程结合单例模式使用    
五,应用场景
  a,去东莞交友模式:
    创建10个钢铁战士
    召唤集合石: CyclicBarrier barrier = new CyclicBarrier(len);
    集合: barrier.await();
    解散:barrier.reset();
   
   抵达东莞,会长喊话,给每个战士们,分配任务,最后统计成绩
   CountDownLatch od = new CountDownLatch(1);
   CountDownLatch ob  = new CountDownLatch(n);
   od.countDown();//让战士们自由发挥
   ob.await();//等待战士们凯旋
   new Runnable(){
    void run(){
      od.await();//会长分配任务细节
      //任务细节:偷菜
        CompletionService<Integer> service = new ExecutorCompletionService<Integer>(pool);
            播种:serice.submit(new CallAble(){....});
            收获:serice.take();
      ob.countDown();//每一个战士完成任务时,调用一次(此代码需要调用10次)
    }    
   }
   拓展:因网吧电脑数量有限,执行任务前可采用信号灯来控制战士们同时上机的数量
  b,数据交换
  Exchanger<Object> exchanger = new Exchanger<Object>();
  线程一细节:
  Object resultOne =exchanger.exchange(毛毛);
  线程二细节:
  Object resultTwo =exchanger.exchange(卡素);
 
  执行结果,毛毛和卡素完成了被交换 ^ o ^
 
  c,定时器
  略~~
    
   
                         
         


转载地址:https://blog.csdn.net/u013494310/article/details/20658503 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:银行柜台业务调度系统
下一篇:python-十分钟入门

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月04日 21时54分38秒