zoukankan      html  css  js  c++  java
  • Java多线程学习笔记

    概念部分:

    1.并发和并行的区别:

       并发 (Concurrency):一个处理器“同时”处理多个任务

       并行 (Parallelism):多个处理器 “同时”处理多个任务

    2.多线程的优点和缺点:

      多线程的优点: 

        可并行处理任务,减少单个任务的等待时间

        线程较进程或子进程系统开销小

        线程间较容易共享资源

        多核情况下可充分利用CPU资源

      多线程的缺点:
        访问冲突
        锁竞争
          –死锁
          –锁粒度
      上下文切换开销
      同步/内存拷贝开销

    示意图:

     

    • 新状态: 一个新产生的线程从新状态开始了它的生命周期。它保持这个状态知道程序start这个线程。
    • 运行状态:当一个新状态的线程被start以后,线程就变成可运行状态,一个线程在此状态下被认为是开始执行其任务
    • 就绪状态:当一个线程等待另外一个线程执行一个任务的时候,该线程就进入就绪状态。当另一个线程给就绪状态的线程发送信号时,该线程才重新切换到运行状态。
    • 休眠状态: 由于一个线程的时间片用完了,该线程从运行状态进入休眠状态。当时间间隔到期或者等待的时间发生了,该状态的线程切换到运行状态。
    • 终止状态: 一个运行状态的线程完成任务或者其他终止条件发生,该线程就切换到终止状态

    语法糖: 

    1.定义线程名字(ID)和循环数

    //定义线程循环次数
    protected int countDown = 10;
    //可以在线程中设定ID并打印来区分各个线程
    private static int taskCount = 0;
    private final int id = taskCount++;
    
    while(countDown-- >0){
    }

     2.获取线程名称

    System.out.println(Thread.currentThread().getName()+":"+value);
    ... 
    Thread t1 = new Thread(us,"t1");

    JVM部分:

    关于锁:

    1.某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。这时,不同的对象实例的synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法; 

    《Tinking In Java》部分:

    1.并发具有可论证的确定性,但是实际上具有不可确定性。

    2.如果没有任务会阻塞,那么在单处理器机器上使用并发就没有任何意义。

    3.某些编程语言被设计为可以将并发任务彼此隔离,这些语言通常被称作函数型语言——erlang。

    4.语法糖:while(countDown-- >0)、private final int id = taskCount++; 使用后置的++和--,可以进行计数器加减的操作,方便又清晰。

    5.各种执行器(Executor):

      CachedThreadPool:一般首选,会创建于所需数量相同的线程。

      FixedThreadPool:事先分好好线程,限制了线程数量。

      SingleThreadExecutor就像是线程数量为1的FixedThreadPool(它提供了长期存活和并发保证,适合于某些特定任务)。SingleThreadExecutor会序列化所有提交给它的任务。

    6.如果希望任务完成时能返回值,用callable代替runnable接口。

    资料:

    http://blog.csdn.net/csh624366188/article/details/7318245

  • 相关阅读:
    洛谷 P2958 [USACO09OCT]木瓜的丛林Papaya Jungle
    洛谷 P1400 塔
    10-2 集合之List
    主从数据库
    【单元测试】
    Pen Editor
    appendGrid
    动画
    JavaScript框架设计 第14章 动画引擎
    >>>
  • 原文地址:https://www.cnblogs.com/xujanus/p/4384559.html
Copyright © 2011-2022 走看看