zoukankan      html  css  js  c++  java
  • 多线程的理解

    A)多线程的作用

    1)发挥多核CPU的优势

    现在的计算机,基本都是多核的。如果是单线程的程序,那么CPU得不到充分的利用,比如说,如果是四核的CPU,运行一个单线程程序,那么它就只是利用了其中的25%,还有75%是处于空闲的状态,这是一种“浪费”。而在单核CPU,我们所谓的“多线程”,其实是假的,在一段时间内,CPU只会处理一段逻辑,而其他的则处于等待等状态。只是由于线程之间切换的速度非常快,让我们产生了多个线程在同时运行的错觉。多核CPU的多线程才是名副其实的多线程,它可以让多段逻辑同时工作,真正发挥出多核的优势,达到充分利用CPU的目的。

    2)防止线程阻塞

    如果只是运行单线程,一旦这个线程发生了阻塞,那么这个程序的效率就会极大的降低了。而运行多线程的话,当某个线程发生阻塞时,哪怕其中一个线程在读取数据发生阻塞时,也不会影响其他线程的继续执行。

    3)便于建模

    这个优点并不算很明显。举个例子,假设有一个极大的任务A,如果我们要用单线程编程的话,那么需要考虑的因素很多,建模的难度极大。但是当我们把这个任务分解成为几个小的任务,然后分别对应建模,并通过多线程分别执行这几个任务时,会大大地降低了建模的难度。

    B)创建线程的方式

    1)通过继承Thread类来创建线程

    2)实现Runnable接口创建线程

    3)通过Callable接口和使用Future创建线程

    4)使用线程池(例如用Excecutor)

    C)start()方法和run()方法的区别

    start()方法时启动一个线程,会自动调用run()方法,线程会自动往下执行,此时不等start()方法执行完;如果直接调用run()方法的话,其实并不算启动了一个线程,程序会等run()方法执行完再往下执行。

    D)Runnable接口和Callable接口的区别

    Runnable接口中的run()方法是void类型的,它的功能只是单纯去执行run()方法体里面的代码;而Callable接口中的call()方法则是由返回值类型的,是一个泛型,和Future、FutureTask配合可用来获取异步执行的结果。Callable+Future/FutureTask可以获取到多线程运行的结果,可以在等待时间太长没获取到需要的数据的情况下取消该线程的任务。

    ————————————————

    未完待续...

  • 相关阅读:
    Javascript:三个函数ceil()、floor()、round()的区别
    一次搞懂建模语言UML
    firewalld 指定IP访问某端口
    Java通过图片url地址获取图片base64位字符串的两种方式
    个人笔记 截止2013.05.08
    解决ie6、7 marginbottom 失效问题
    jQuery 初学
    大小不固定的图片和多行文字的垂直水平居中(转)
    border :before :after 的应用
    关于<pre></pre>标签 IE6,7下实现whitespace:prewrap;
  • 原文地址:https://www.cnblogs.com/WakingShaw/p/13028892.html
Copyright © 2011-2022 走看看