Code Monkey home page Code Monkey logo

mutithreadtree's Introduction

MutiThreadTree

多线程编程

实现多线程的几种方式:
      1)继承Thread类,重新run方法;
      2)实现Runnable接口,重写run方法,
      3)通过Callable和FutureTask创建线程。
      5)通过线程池创建线程。
Fork/Join

      ForkJoin是JDK7提供的原生多线程处理框架,其基本**是将大任务切分成多个小任务,在处理
     多线程中已经有如AKKA这样的基于ACTOR模型的框架,而FORKJOIN则是针对具有明显可以进行任
     务分隔特性需求的实现。

     Fork/Join使用两个类完成以上两件事情:
         ForkJoinTask:要使用ForkJoin框架,必须首先创建一个ForkJoin任务,它提供在任务中
                       执行fork(),join()的操作机制,通常我们不直接继承ForkJoinTask类
                       ,只需要直接继承其子类。

           1)RecursiveAction:
              用于没有返回结果的任务。
           2)RecursiveTask:
              用于有返回值的任务。

           ForkJoinPool:task要通过ForkJoinPool来执行,分割的子任务也会添加到当前工作线
                         程的双端队列中,进入队列的头部。当一个工作线程中没有任务时,会从
                         其他工作线程的队列尾部获取一个任务。

           ForkJoin框架使用了工作窃取的**,算法从其他队列中窃取任务来执行。

Signal

      Sun为我们提供了2个方便安装和替换信号处理器的工具类。
         sun.misc.Signal
         sun.misc.SignalHandler

      在Java编程中使用信号的实际收益
         信号作为最原始的进程间异步通信手段,有着诸多局限性的,比如不能传递上下文,信号随
         时都可能被占用导致冲突,不具备扩展性等,所以对功能性需求来说,使用它收益甚微。

         当然,信号也不是一无是处,除了用作简单的异步通知外,还可以利用它的进程事件通知功能。在Java里有一个典型例子,就是 ShutdownHook。

TimerTask定时调用类

Condition

      任何一个java对象都天然继承Object类,在线程间实现通信的往往会应用到Object方法,比如
      wait(),notify(),notifyAll()几个方法实现等待、通知机制,同样的,在java Lock体系下
      依然会有同样的方法实现等待/通知机制,从整体上看Object的wait和notify是与对象的监视器
      配合完成线程间的等待/通知机制,而Condition与Lock配合完成等待通知机制,前者是java
      底层级别的,后者是语言级别的,具有更高的可控制性和扩展性。二者出了在使用方式上不同外,
      在功能特性上还是有很多的不同:
          1)Condition能够支持不响应中断,而通过使用Object不支持
          2)Condition能够支持多个等待队列(new 多个Condition对象),而Object方式只能
             支持一个
          3)Condition支持超时时间的设置,而Object不支持。

      我们知道在锁机制的实现上,AQS内部维护了一个同步队列,如果是独占式锁的话,所有获取锁失
      败的线程的尾插入到同步队列,同样的,condition内部也是使用同样的方式,内部维护了一
      个等待队列,所有调用condition.await方法的线程会加入到等待队列中,并且线程状态转换为
      等待状态

mutithreadtree's People

Contributors

qiuqiuxiaomaomi avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.