zoukankan      html  css  js  c++  java
  • 多线程进阶

     
    主题:多线程进阶

    多线程的一些核心内容以及要关注的细节。

    一、线程的实现

    继承thread类重写run()方法和实现Runnable接口实现run()方法

    注意点:new线程实例时建议加线程名和要处理下线程的中断异常([InterruptedException])

    二、不得不提的[ThreadLocal]

    顾名思义:线程局部变量,提高性能,可以理解为对线程的“工厂模式”。

    注意点:不能解决多线程环境下的数据共享的问题。

    使用[ThreadLocal],一般都是声明在静态变量中。如果不断的创建[ThreadLocal]而且没有调用其remove方法,将会导致内存泄露。如果是static的[ThreadLocal],一般不需要调用remove。

    三、线程的同步与锁

    普通锁:Synchronized。方法上(静态或非静态)加。

    读写锁:接口[ReadWriteLock]、实现[ReentrantReadWriteLock]。性能高,一般建议用这个。

    四、线程的调度

    wait/(notify/notifyAll())机制

    同在Synchronized代码块中有效。

    wait/sleep的区别

    wait释放锁,sleep没有。

    线程的让步yield()和合并join()

    五、阻塞队列

    java.util.concurrent.[BlockingQueue]、[ArrayBlockingQueue], [DelayQueue], [LinkedBlockingQueue], [PriorityBlockingQueue], [SynchronousQueue]

    为多线程的排队等候的业务场景开辟了便捷通道,非常有用

    六、线程池

    Executors、[ExecutorService和Future]

    Future的get ()和get (long timeout, [TimeUnit] unit)方法

    对有高性能要求的中间件或者定时任务的实现非常有用。如我们的R系统

    最后火青还给大伙总结要注意以下三点:

    1、编码时要注意静态或者非静态成员变量等是否有线程不安全问题。

    2、不要随便使用Synchronized。

    3、尽量用java5的自带的api实现多线程。

  • 相关阅读:
    html component(htc)入门(转)
    eclipse maven plugin 插件 安装 和 配置
    Error configuring application listener of class org.springframework.web.util.IntrospectorCleanupListener
    局域网下tomcat部署的服务让别人也能访问
    基于geowebcache切片服务的发布
    vee-validate-----专门用来做表单验证的vue插件
    移动端触摸事件
    使用svg显示加载中提示界面
    swiper---h5 跨域解决办法
    html5
  • 原文地址:https://www.cnblogs.com/ios9/p/Java_Thread.html
Copyright © 2011-2022 走看看