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实现多线程。

  • 相关阅读:
    我是这样在Google paly上赚美刀的
    休闲英语:超经典实用的英文短信缩写
    休闲英语:揭秘7招最有效的拍马屁技巧
    laravel5数据库配置及其注意事项
    帮助函数
    Laravel报错Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()
    NetBeans 时事通讯(刊号 # 67 Aug 04, 2009)
    JavaEE 6 将包括 JSR330 和 JSR299
    苯事两则
    NetBeans 时事通讯(刊号 # 66 Jul 30, 2009)
  • 原文地址:https://www.cnblogs.com/ios9/p/Java_Thread.html
Copyright © 2011-2022 走看看