• java多线程笔记


    Synchronized

    Synchronized锁定类,锁住的是类字节码对象

    总结:

    1、 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁

     2、 每个对象只有一个锁与之关联,谁拿到这个锁谁就可以运行它所控制的那段代码

     3、 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无所谓的同步控制

    一个程序至少有一个进程,一个进程至少有一个线程 进程在执行过程中拥有独立的内存但单元,而多个线程共享内存,极大的提高了程序运行的效率

    Start方法:

    此方法不会被主要方法线程or由虚拟机创建的系统组线程调用, 任何向此方法添加的新功能方法在未来都会被添加到虚拟机中。

    Yield方法:

    是一个本地方法,提示线程调度器当前线程愿意放弃当前CPU的使用。如果当前资源不紧张,调度器可以忽略这个提示,本质上线程状态一直是runable,不会发生阻塞。

    每个锁对象有两个队列:就绪队列和阻塞队列

    就绪队列:存储将要获得锁的线程

    阻塞队列:存储被阻塞的线程

    对象锁:每个对象都有对象锁,当某个线程进入用synchronized定义的方法时,就获得当前类对象(方法所属的类的对象)的锁,其他线程就不能再获得该锁,直到线程释放该锁。一个类对象有一个对象锁,多个同步方法公用一个对象锁。

    Wait()方法:调用wait()方法会挂起当前线程,并释放共享资源的锁

    Notify()方法:调用任意对象的notify()方法会在因调用该对象的wait()方法而阻塞的线程中随机选择一个线程接触阻塞,但要等到获得锁后才可真正执行

    NotifyAll()方法:调用了norify()方法会因调用该对象的wait()方法而阻塞的所有线程一次性全部解除阻塞。

    Wait() norify() notifyALl() 这三个方法都是Object类中的final方法,被所有的类继承且不允许重写,并且只能在同步方法中使用,否则会抛出异常。

    Thread.currentThread() 返回当前线程的对象。

    线程优先级:

    每个线程的优先级都介于Thread.MIN_PRIORITY 和 Thread.MAX_PRIORITY之间

    多线程有两种实现方法,分别是继承Thread类和实现Runnable接口

    同步的实现方法有两种,分别是synchronized,wait和notify

    线程的基本状态以及状态之间的关系: Java中的线程有四种状态,分别是:运行,就绪,挂起,结束。

     

    陆续更新中~~

  • 相关阅读:
    正则表达式中?=和?:和?!的理解
    Python isinstance() 函数
    什么是REST架构
    [iOS常见问题] 关于使用QQ做第三方登录的问题!
    js与webview 常用交互代码
    AFNetworking 使用 核心代码
    NSString / NSData / char* 类型之间的转换
    集合视图 代码
    IOS面试问题总结
    UIViewController的生命周期及iOS程序执行顺序
  • 原文地址:https://www.cnblogs.com/dreamzj/p/14324028.html
Copyright © 2020-2023  润新知