Java:线程的一些重要方法

一、start()

作用:对线程对象调用start方法来使线程执行。
要点
(1)调用start()后线程只是立即处于Runnable状态,不一定直接运行,也可能正在排队等待cpu资源。

(2)start()底层可以看做是调用了run()方法。start()首先从CPU中申请不同于当前线程的另一个线程空间来执行run()中的代码,也就是说当前线程和start()的线程在相对独立的两个线程空间中运行。而如果仅仅是调用了run(),而不是通过start()调用,就只是在当前线程内部执行,而不是另开辟新空间执行。所以,仅调用线程对象的run()是不会产生新的线程的,只有start()才会创建新的线程空间。

二、sleep()

作用:使当前线程在指定的时间内休眠(暂停执行),把cpu片段让出给其他线程(前提是与其没有资源的竞争),减缓当前线程的执行。

要点
(1)sleep()是静态方法,只能使当前正在运行的线程睡眠,无法控制线程对象。
(2)如果当前线程有获取到的锁,sleep()不会让出锁。
(3)当睡眠时间到时,线程返回到Runnable状态,并非直接运行。
(4)sleep(0)即手动触发一次操作系统分配时间片的操作,也就是让当前线程参与其他线程的竞争,重新分配一次资源。

三、join()

作用:使调用该方法的线程对象插队,当前线程必须等待它完成后才能继续执行。
要点
(1)利用join()可以测试某线程的工作状态。而不是用sleep()预估着大概的时间让出cpu。
(2)join(time)意味着把当前线程A的执行时间让给调用join()的线程B指定时间之后,A,B两个线程再重新竞争;而join()就待B完成A才能继续执行。而join(0)是等价于join()的。
(3)join()底层是通过调用wait()来实现的。

四、yield()

作用:暂停当前正在执行的线程对象,并执行其他线程。
要点
(1)调用yield()表明该线程并不是紧急的,可以让步给其他线程。
(2)调用yield()仅能使线程从运行态转到Runnable就绪态,这表示它依然会参加线程调度的评选,即有可能被操作系统再次选中。这样不会提高任何效率,仅降低了CPU的总周期。

五、interrupt()

作用:如果调用的线程处于阻塞状态,那么他的中断状态位会被置为true,并抛出InterruptedException异常。
要点
(1)interrupt()并非真正的停止掉线程,它只是将中断状态位重置为true,线程仍会继续运行。

六、interrupted()

作用:测试当前线程是否已被中断,并清除线程的中断状态位为false。
要点
(1)interrupted()是静态方法,通过Thread.调用。
(2)底层调用的是isInterrupted()。

七、isInterrupted()

作用:测试当前线程是否已被中断。
要点
(1)与interrupted()不同的就是它不会清除中断状态位。

   三个有关于中断的方法其实有点云里雾里的,看一下测试的代码就好理解了:

new Thread(){
            @Override
            public void run() {
                {
                    System.out.println("running A");
                    this.interrupt();//中断位被置为true,但是并不会终止运行
                    System.out.println(this.isInterrupted());//已被中断,应返回true
                    System.out.println(Thread.interrupted());//也返回true,但清除了中断位为false
                    System.out.println(this.isInterrupted());//此时应为false
                }
            }
        }.start();

运行结果:
在这里插入图片描述

八、currentThread()

作用:返回当前线程。
要点
(1)是静态方法,通过Thread.调用。
(2)常用Thread.currentThread().getName()获取当前线程名。

九、isAlive()

作用:判断当前线程是否处于活动状态。
要点
(1)线程处于正在运行或者就绪的状态就认为线程是存活的。

   目前就这些,以后遇到了会补充。(wait,notify等方法会在锁的文章中描述)

发布了26 篇原创文章 · 获赞 0 · 访问量 497

猜你喜欢

转载自blog.csdn.net/qq_43336822/article/details/104392378
今日推荐