• java多线程之:线程对象一些api


    一:wait()方法,wait(long timeout)
    --->锁对象调用wait()方法,让当前线程小a进入等待状态,阻塞住,并让出当前线程拥有的锁。
    --->直到其他线程用锁对象调用notifyAll(),notify()将小a从wait虚拟队列中将阻塞的线程唤醒。重新争锁。
    --->当别的线程对当前线程小a的对象调用interrupt()方法,则阻塞在wait虚拟队列的线程抛出InterruptedException异常,打破阻塞。
    --->wait(longtimeout)进入锁对象虚拟队列的线程在阻塞timeout长时间后,此时已经让出锁,自己自动唤醒,再次争抢锁。

    二:notifyAll()notify()方法
    --->notifyAll()方法是将进入锁对象wait队列里所有阻塞的线程唤醒,重新争取锁。
    --->notify()方法是将进入所对象wait虚拟队列里的阻塞的线程,拿出一个唤醒。

    三:sleep(long time)
    --->当前线程休眠time长时间,并不释放锁。

    四:interrupt()
    --->线程对象a.interrupt():将a线程的中断标示位设置成true。
    --->线程对象a.isInterrupted():获取a线程的中断标示位的值。
    --->Thread.interrupted():返回当前线程的中断标示位的值,同时不管值是什么在返回前将该值设置为false;
    --->当线程的中断标示位为true的时候,线程如果在wait().sleep().join()中阻塞时候,或者即将进入的时候,都会抛出InterruptedException异常,从阻塞状态中唤醒,并将状态位设置为false.

    五:join()方法
    --->在线程x的线程体中用线程a.join()时,则线程x的线程体就会阻塞到a.join()这句代码这,等待a线程的线程体运行完毕,线程x的线程体的代码才从a.join()这句代码开始往后执行。
    --->join(long time):代表线程x会阻塞time秒时间,线程a运行正常,time秒后线程x开始从阻塞位置向下执行代码
    --->底层是wait(),不考虑锁。

    六:yeid()方法
    --->那个线程调用此方法,那个线程暂时一次让出CPU调度权。至于能否暂停,实际看cpu是否将时间片分给其他的线程。我主动放弃一次,至于cpu走不走,看cpu的。


    七:isAlive()方法
    --->线程a.isAlive(),如果线程a的线程体还未执行完,则返回true,如果线程a的线程还未启动,活着线程体已经运行完,则返回false
    --->来判断一个线程是否还活着

    八:getstate()方法
    --->获取线程的运行状态
    --->NEW 新建状态
    --->RUNNABLE 运行(可运行)状态
    --->BLOCKED     阻塞状态
    --->TIMED_WAITING     休眠状态
    --->WAITING     等待状态
    --->TERMINATED     终止状态

  • 相关阅读:
    Ubuntu16.04 安装Teamviewer
    Redis 中的事务
    apache rewrite .htaccess 站点内容重定向实例
    PHP_EOL常量
    PHP 设计模式之适配器模式
    MYSQL优化
    php设计模式之简单工厂模式
    php设计模式之单例模式
    PHP设计模式之策略模式
    PHP 设计模式之观察者模式 (转载)
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/5784389.html
Copyright © 2020-2023  润新知