• 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()判断线程对象是否已经是中断状态,但不清除状态标志。

    —转载请注明出处
  • 相关阅读:
    UITableView 表视图编辑
    Swift(一)简单值
    【iOS系列】- iOS吸附效果的实现 之 UICollectionView的使用全解
    【iOS系列】-A server with the specified hostname could not be found.问题解决
    【iOS9系列】-3DTouch开发
    【iOS系列】-iOS查看沙盒文件图文教程(真机+模拟器)
    【iOS系列】-iOS开发常用库文件总结
    【iOS系列】-UITableViewCell的展开与收缩的实现思路
    02-Swift学习笔记-元组类型
    CocoaPoda在iOS开发中的使用
  • 原文地址:https://www.cnblogs.com/landiss/p/14660407.html
Copyright © 2020-2023  润新知