Java并发编程

作者: 鬼谷神奇 | 来源:发表于2016-07-22 19:54 被阅读46次
    • synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:
    1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
    2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
    3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
    4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
    • wait/notify/notifyAll方法都是Object中的方法,用来控制线程的状态
      • wait:如果对象调用了wait方法,会使持有这个对象的线程把该对象的控制权交出去,然后处于等待状态(释放锁)
      • notify:如果对象调用了notify方法,会通知正在等待该对象控制权的线程继续运行
      • notifyAll:如果对象调用了notifyAll方法,会通知所有等待这个对象控制权的线程继续运行
    • sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法
    • wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
    • sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

    http://www.mamicode.com/info-detail-517008.html

    • sleep() yield() join()属于线程方法

      • sleep() 使当前线程进入阻塞状态,至少在一段时间内无法执行;低优先级的线程也可以执行
      • yield() 重新使当前线程进入就绪状态,可能还会立即继续执行;把机会让给同等或高优先级的进程
    • volatile两个作用:

      • 线程可见性:一个线程对一个变量的修改立刻由工作内存写回主内存,然后反映到其他线程的读操作中
      • 禁止指令重排序优化:由于编译器的优化,程序(尤其是多线程程序)的执行顺序和源代码不同,这在单线程系统中没有问题,一旦引入多线程可能引起严重的问题,volatile可以从语义上解决这个问题。
    • transiant: 在序列化对象时,transiant修饰的字段不会被序列化(类static变量也不会被序列化)

    • Java线程池

    • Java并发编程:Callable、Future和FutureTask

    • Java并发编程:深入剖析ThreadLocal

    • Future提供了三种功能:
      1)判断任务是否完成;
      2)能够中断任务;
      3)能够获取任务执行结果。

    相关文章

      网友评论

        本文标题:Java并发编程

        本文链接:https://www.haomeiwen.com/subject/egsjjttx.html