• 多线程进阶


     
    主题:多线程进阶

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

    一、线程的实现

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

  • 相关阅读:
    ASP.NET中的状态保持(转载)
    Win7系统下VS2008安装SP1补丁解决JQuery无智能提示的问题
    合并多个List<T>类型并通过LINQ按指定属性排序
    ASP.NET状态保持:ViewState
    第一部分 CLR基础:第1章 CLR的执行模型
    Oracle存储过程知识汇总
    ASP.NET中Button控件的CommandName和CommandArgument属性用法
    PL/SQL Developer使用
    ASP.NET常用代码汇总
    PL/SQL Developer中文注释乱码的解决办法
  • 原文地址:https://www.cnblogs.com/ios9/p/Java_Thread.html
Copyright © 2020-2023  润新知