Java多线程 - Java多线程方法说明

版权声明:写文章辛苦,请不要复制粘贴,如果要,请注明来处 https://blog.csdn.net/u012627861/article/details/83001857

简单说明

博文中提到的"可参阅博文"还没来得及写,见谅!

静态方法

  • Thread Thread.currentThread()
    该方法用于获取当前线程对象,当我们用Runnable方式来实现run的时候,run中的this指向的不是线程对象,此时你要获取当前线程,就可以用该方法。
  • void Thread.sleep(long millis)
    使当前线程进入TIMED_WAITING状态,millis参数单位为毫秒,表示进入TIMED_WAITING状态的时间。该方法调用后会继续占用共享资源和CPU。
  • void Thread.sleep(long millis, int nanos)
    两个参数的sleep还是那个sleep,nanos表示纳秒,睡眠时间则为毫秒数+纳秒数。普及一下,1毫秒=1000微秒=1000000纳秒。nanos取值是闭区间[0,999999],有了这个方法,也就可以做到微秒和纳秒级的sleep了。
  • boolean Thread.interrupted()
    返回当前线程是否被中断。如果被中断,则返回true并且将中断标识重新设置为false。详情请参阅《Java多线程 - 线程的中断》。
  • int Thread.activeCount()
    API上说了,返回当前线程的线程组中活动线程的数目。这句话我读懂了,但是当前线程的线程组包含了哪些线程呢?活动线程指的是什么状态下的线程呢?这在《Java多线程 - 什么是活跃线程》博文中进行了较深入的探究。
  • void Thread.yield()
    Thread类中的注释说了,该方法被执行后,意味着当前程序愿意让出它所使用的处理器。我们可以深入理解并总结一下:该方法执行后,表示当前线程让出处理器,别的线程可以使用当前线程所使用的处理器了,但并不意味当前线程不会在让出后立马重新获取到了让出的处理器。在同步块中,也并不意味着释放了同步锁。
  • Map<Thread, StackTraceElement[]> Thread.getAllStackTraces()
    看该方法中的注释和自己写代码验证,这个方法用于获取当前时间点所有活跃线程中的方法调用记录(堆栈快照),例如A调用了B,B调用了C,那么得到当前线程下方法的调用记录为C,B,A。这在博文《Java多线程 - StackTrace》中进行了较深入的探究。
  • int Thread.enumerate(Thread tarray[])
    该方法会将当前时间点所有的活跃线程装载到tarray数组当中去。注意,并不是当前线程下的活跃子线程。
  • void Thread.dumpStack()
    这个方法的源码只有一句代码:new Exception(“Stack trace”).printStackTrace(); 目的是用于打印当前线程在当前时间点的堆栈记录。
  • native void Thread.holdsLock(Object obj)
    这是一个native方法,用于判断当前线程是否获取到了obj的同步锁。方法注释上,说明这个方法的设计是用于assert的,我也想不出来有什么场景下可以assert。所以明白这个意思就好了。
  • void Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)
    该方法用于设置线程默认的异常处理对象(作用在所有的线程对象上),在一个线程中,如果出现了异常,但我们没有捕获处理,那么就会交给UncaughtExceptionHandler来处理。详情参阅博文《Java多线程 - UncaughtExceptionHandler详解》
  • void Thread.getDefaultUncaughtExceptionHandler()
    该方法用于获取线程默认处理器。

实例方法

  • synchronized void setName(String name)
    设置线程名称,为了确保多个线程同时设置名称,该方法被设计为同步方法
  • final void setDaemon(boolean on)
    设置线程为守护线程,什么是守护线程?详情请参阅《Java多线程 - 守护线程》
  • final void setPriority(int newPriority)
    设置线程执行优先级,取值为一个闭区间[1,10]。如果给定的值不在闭区间内,则会抛出java.lang.IllegalArgumentException。可以查看源码来得到这个结论:
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);
    }
}
  • void setUncaughtExceptionHandler(UncaughtExceptionHandler eh)
    该方法用于设置当前线程对象的异常处理器。线程可以有自己的异常处理器,如果线程本身没有设置异常处理器,那么会交给默认的异常处理器处理。详情请参阅《Java多线程 - UncaughtExceptionHandler详解》

  • void setContextClassLoader(ClassLoader cl)
    设置线程上下文的类加载器,至于不同的加载器对线程的影响,有兴趣的同学可以先详细了解一下类加载器。

  • final String getName()
    获取线程名称

  • final long getId()
    获取线程ID

  • StackTraceElement[] getStackTrace()
    获取当前线程在当前时间点的堆栈快照。什么是堆栈快照,详情请参阅见《Java多线程 - StackTrace》

  • ThreadGroup getThreadGroup()
    获取当前线程对象的线程组对象。什么是线程组?详情请参阅《Java多线程 - ThreadGroup》

  • ClassLoader getContextClassLoader()
    获取当前线程的类加载器

  • int getPriority()
    获取线程优先级

  • State getState()
    获取当前线程对象的线程状态对象

  • UncaughtExceptionHandler getUncaughtExceptionHandler()
    获取当前线程的异常处理器

  • synchronized void start()
    用于启动线程,该方法调用后,线程进入RUNNABLE状态。注意这个方法是同步的,这是为了避免多个线程同时对Thread对象进行start。

  • void run()
    线程的主体方法,线程被执行的就是这个方法

  • final void checkAccess()

  • void interrupt()
    详情请参见《Java多线程 - 线程的中断》

  • final boolean isDaemon()
    判断当前线程对象是否为守护线程,什么是守护线程。参见《Java多线程 - 守护线程》

  • boolean isInterrupted()
    详情请参见《Java多线程 - 线程的中断》

  • final native boolean isAlive()
    判断当前线程是否还“活着”,注意:这是一个final native方法,仔细想想,这么去修饰是合情合理的。

  • final void join() throws InterruptedException
    详情请参见《Java多线程 - join方法的探究》

  • final synchronized void join(long millis) throws InterruptedException
    详情请参见《Java多线程 - join方法的探究》

  • final synchronized void join(long millis, int nanos) throws InterruptedException
    详情请参见《Java多线程 - join方法的探究》

猜你喜欢

转载自blog.csdn.net/u012627861/article/details/83001857
今日推荐