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

    —转载请注明出处
  • 相关阅读:
    arcgis api for js入门开发系列二十打印地图的那些事
    arcgis api 3.x for js 入门开发系列十九图层在线编辑
    arcgis api 3.x for js 入门开发系列十八风向流动图(附源码下载)
    influxDB 0.9 C# 读写类
    [InfluxDB] 安装与配置
    分布式,集群,冗余的理解
    CentOS 7.0系统安装配置图解教程
    InfluxDB学习之InfluxDB的基本操作| Linux大学
    InfluxDB v1.6.4 下载
    InfluxDB中文文档
  • 原文地址:https://www.cnblogs.com/landiss/p/14660407.html
Copyright © 2011-2022 走看看