zoukankan      html  css  js  c++  java
  • java 多线程(二)

    线程的生命周期

    (1)新建
    (2)就绪
    (3)运行
    (4)阻塞
    (5)结束

    休眠

    sleep()的调用可以抛出InterruptedException异常,异常不能跨线程传播,所以必须在本地处理所有任务内部产生的异常。
    在java.lang.Thread中定义,如果在main方法中直接调用,表示主线程休眠;一般在run方法中通过判断条件调用。

    public static native void sleep(long millis) throws InterruptedException;
    public static void sleep(long millis, int nanos)throws InterruptedException {
          if (millis < 0) {
                throw new IllegalArgumentException("timeout value is negative");
          }
          if (nanos < 0 || nanos > 999999) {
                throw new IllegalArgumentException("nanosecond timeout value out of range");
          }
          if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
                millis++;
          }
          sleep(millis);
    }
    
    • millis:毫秒
    • nanos:毫微秒,十亿分之一秒

    获取当前线程

    //Thead.currentThread()获取
    public static native Thread currentThread();
    

    优先级

    public final static int MIN_PRIORITY = 1;
    public final static int NORM_PRIORITY = 5;
    public final static int MAX_PRIORITY = 10;
    private int priority;
    public final void setPriority(int newPriority) {
        ThreadGroup g;
        checkAccess();
        if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) {
            throw new IllegalArgumentException();
        }
        if((g = getThreadGroup()) != null) {
            if (newPriority > g.getMaxPriority()) {
                newPriority = g.getMaxPriority();
            }
            setPriority0(priority = newPriority);
        }
    }
    public final int getPriority() {
        return priority;
    }
    

    让步

    public static native void yield();
    

    作用是提醒线程调度器,该换个线程来执行了。

    后台线程

    后台线程也称为守护线程,是指在程序运行的时候在后台为其它线程提供服务的线程,比如gc线程和main线程。
    任何非后台线程在运行,后台线程就不会终止。反之,当所有非后台线程结束,后台线程也终止。
    后台线程创建的任何线程默认都为后台线程。

    //true表示设置为后台线程,false表示非后台线程,但必须在线程启动前调用
    public final void setDaemon(boolean on) {
        checkAccess();
        if (isAlive()) {
            throw new IllegalThreadStateException();
        }
        daemon = on;
    }
    private boolean daemon = false;
    //判断是否是一个后台线程
    public final boolean isDaemon() {
        return daemon;
    }
    

    加入一个线程

    如果某个线程在另一个线程t上调用t.join(),此线程将被挂起,直到目标线程t结束才恢复(即t.isAlive()返回为假)

    public final synchronized void join(long millis)throws InterruptedException {
          long base = System.currentTimeMillis();
          long now = 0;
          if (millis < 0) {
               throw new IllegalArgumentException("timeout value is negative");
          }
          if (millis == 0) {
                while (isAlive()) {
                      wait(0);
                }else {
                      while (isAlive()) {
                            long delay = millis - now;
                            if (delay <= 0) {
                            break;
                      }
                      wait(delay);
                      now = System.currentTimeMillis() - base;
                }
          }
    }
    public final synchronized void join(long millis, int nanos)throws InterruptedException {
          if (millis < 0) {
                throw new IllegalArgumentException("timeout value is negative");
          }
          if (nanos < 0 || nanos > 999999) {
                throw new IllegalArgumentException("nanosecond timeout value out of range");
          }
          if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
                millis++;
          }
          join(millis);
    }
    public final void join() throws InterruptedException {
        join(0);
    }
    

    捕获异常

  • 相关阅读:
    狄慧201771010104《面向对象程序设计(java)》第十六周学习总结
    狄慧201771010104《面向对象程序设计(java)》第十五周学习总结
    狄慧201771010104《面向对象程序设计(java)》第十四周学习总结
    201771030122-王瑞梅 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告
    201771030122-王瑞梅 实验一 软件工程准备—<初读《构建之法--现代软件工程》>
    软件工程学习总结
    团队项目在GitHub合作开发管理流程
    2020 软件工程—— 中期获“衣”有感
    201771010131-王之泰 实验四 软件项目案例分析
    数据库连接和导出excal
  • 原文地址:https://www.cnblogs.com/heibaimao123/p/13827604.html
Copyright © 2011-2022 走看看