Java并发编程

  • 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)能够获取任务执行结果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容