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

  • 相关阅读:
    HDU 2196 Computer
    HDU 1520 Anniversary party
    POJ 1217 FOUR QUARTERS
    POJ 2184 Cow Exhibition
    HDU 2639 Bone Collector II
    POJ 3181 Dollar Dayz
    POJ 1787 Charlie's Change
    POJ 2063 Investment
    HDU 1114 Piggy-Bank
    Lca hdu 2874 Connections between cities
  • 原文地址:https://www.cnblogs.com/ios9/p/Java_Thread.html
Copyright © 2011-2022 走看看