zoukankan      html  css  js  c++  java
  • 学习笔记1—多线程相关笔记

    1.为什么使用多线程?

    举例说明:
    单个进程好比:一个人需要做饭、洗衣服、扫地、接孩子放学,需要一个人一个一个去完成,合理规划时间。
    多线程好比:找多个人做饭、洗衣服、扫地、接孩子放学,他们之间互不干扰,互不影响。
    由此可以看到:多线程相比于单个进程执行效率更高。能合理的利用cpu资源,降低程序之间的耦合性。

     

    2.多线程有几种实现方式?

    继承Thread类、实现Runnable接口、内部类 new Thread(new Runnable()..)

     

    3.使用多线程过程中需要注意什么?

    使用多线程需要注意线程安全性问题。
    线程安全解决方案有:同步方法 、同步代码块
    同步方法:使用synchronized关键字修饰的方法,例如 void synchronized(){}
    同步代码块: 使用synchronized修饰的代码块,例如 synchronized(obj){} ,obj 可以是this锁,也可以是某个对象锁

     

    4.多线程之间怎么通讯?

    使用等待唤醒机制:wait()、notify()、notifyAll()
    wait:使当前线程进入等待状态,调用时必须放在synchronized方法 或者 synchronized 代码块中。
    notify:唤醒一个等待当前锁对象的线程
    notifyAll:唤醒所有等待当前锁对象的线程

    5.并发包下有哪些同步容器 和并发容器?

    Java中同步容器一共有两个Vector 和 HashTable。
    两者的共性:都是线程安全的,在需要同步的方法上加synchronized关键词
    使用Collections.synchronized*()方法可以将不安全的集合变成线程安全的集合

    Java中并发容器也有两个:ConcurrentHashMap 和 ConcurrentSkipListMap。
    ConcurrentHashMap是线程安全的,由于代码中大多数全局变量使用volatile关键字声明,所以性能较好。
    ConcurrentSkipListMap是在ConcurrentHashMap的基础上,增加了排序功能

     

    6.Java中有三种移位运算符

    << : 左移运算符,num << 1,相当于num乘以2
    >> : 右移运算符,num >> 1,相当于num除以2
    >>>: 无符号右移,忽略符号位,空位都以0补齐

  • 相关阅读:
    openlayers6聚合图(附源码下载)
    arcgis api 4.x for js地图加载第三方矢量切片
    leaflet读取tif像素值的两种实现方式(附源码下载)
    openlayers6热力图(附源码下载)
    cesium 3dtiles模型单体化点击高亮效果
    leaflet聚合图功能(附源码下载)
    openlayers6绘制扇形(附源码下载)
    【 Windows 10】神州网信政府版官方镜像
    Windows10 解决“装了 .NET Framework 4.5.2/4.6.1/4.7.1等等任何版本 或版本更高的更新”问题
    App.config/Web.config 中特殊字符的处理
  • 原文地址:https://www.cnblogs.com/IT-study/p/10769208.html
Copyright © 2011-2022 走看看