zoukankan      html  css  js  c++  java
  • Java 线程基础

    线程基础特点
    1、方法内部变量是线程安全的
    2、实例变量非线程安全(对象属性)
    3、synchronized锁的是对象,并不是方法或者代码块
    4、synchronized锁可重入。同一个线程对同一对象锁可以多次获得。
    5、加锁的代码出现异常时,自动释放锁
    6、volatile主要作用是让变量在多个线程之间变得可见。它保证有序性,与可见性,但不保证原子性。
    7、synchronized非静态方法与synchronized static方法持有的锁是不一样的。一个是对象锁,一个是Class锁,而Class可以对类的所有对象实例起作用。
    synchronized(class)与synchronized static方法的作用是一样的。

    线程的几种状态
    新建(New)、可运行(Runable)、运行中(Running)、阻塞(Blocking)、结束(Died)

    api
    static sleep():让当前线程休眠指定的时间,休眠过程中不释放锁。
    static yield():方法的作用是让出当前CPU资源,但是让出时间不确定,有可能刚让出又马上获得CPU时间片。
    join():等待调用线程运行完成,在继续运行当前线程。
    在main方法中运行t1.join();表示主线程(main)等待子线程(t1)运行完成之后在运行join方法后的代码。join方法调用要在线程启动之后,否则不生效。

    等待与通知
    Object类的三个方法:
    wait():该方法的作用是使当前线程进行等待。
    notify():唤醒处于等待状态的一个线程,如果有多个随机唤醒一个。
    notifyAll():唤醒所有等待的线程。

    Condition类的三个方法:
    await()等价于wait()
    signal()等价于notity()
    signalAll()等价于notifyAll()

    注意:
    wait方法会释放锁;
    这三个方法必须在synchronized方法或者synchronized块中调用否则抛异常;
    必须为同一对象调用wait()、notify()、notifyAll(),否则通知不成功。一般为锁对象进行调用。

    线程中断
    interrupt()线程终止,但调用此方法的线程并不会停止,它仅仅是给线程添加一个状态标志,通过标志记去做终止线程的操作;
    interrupted()静态方法,判断当前线程是否已中断,执行后清除具有将状态标志清除置为false的功能;
    isInterrupted()判断线程对象是否已经是中断状态,但不清除状态标志。

    —转载请注明出处
  • 相关阅读:
    php后门隐藏技巧
    给你的PHP大马添加后门(黑吃黑)
    分析 PHP大马-php_mof SHELL
    过WAF菜刀制作
    eval与php一句话的关系
    php一句话转发脚本(可能过狗= =)
    wmic与mimikatz技巧
    LPK后门
    grunt常用插件的使用
    jquery实现后台系统左侧菜单的点击展开/收缩二级菜单效果
  • 原文地址:https://www.cnblogs.com/landiss/p/14660407.html
Copyright © 2011-2022 走看看