欢迎访问宙启技术站
智能推送

Java多线程函数:start()、join()、isAlive()、sleep()、notifyAll()

发布时间:2023-06-16 19:50:19

一、start()函数

Java中,通过继承Thread类来创建一个新的线程,然后调用start()函数来启动这个线程。

具体而言,重写Thread类的run()函数来创建线程。一旦run()函数被调用,线程就开始执行。调用start()函数之后,线程就启动了,run()函数在独立的线程上执行。

那么线程启动后是怎么执行的呢?Java虚拟机(JVM)会在其它的线程上启动一个新的线程,并在这个新的线程上开始执行run()函数。和原来的线程一起运行,也就是实现了多线程的效果。

二、join()函数

join()函数是让调用它的线程等待线程结束后才能继续执行的函数。比如在主线程中启动了一个新的线程,如果不等这个线程执行完,主线程就会和这个线程同时运行,无法保证程序正确。这时候就可以使用join()函数来保证主线程等到新的线程完成之后再继续运行。

当线程执行完毕,或者等待时间超过设定的最大等待时间,join()函数会返回,主线程才能继续继续执行。

三、isAlive()函数

isAlive()函数是判断一个线程是否还在执行的函数。如果一个线程已经结束,那么它就不再是一个活跃的线程了,因此isAlive()函数会返回false。如果一个线程还在执行,那么isAlive()函数会返回true。

四、sleep()函数

sleep()函数可以让线程休眠指定的时间,单位是毫秒。当一个线程被sleep()函数休眠时,它会释放CPU资源,但是占用内存资源和线程对象本身。

比如说一个线程需要等待某个事件发生,但是这个事件的时间是不确定的,这时候就可以使用sleep()函数来让线程休眠,等待事件发生。当事件发生后,线程就会被唤醒。

五、notifyAll()函数

notifyAll()函数用于唤醒正在等待一个对象锁的所有线程。当线程获取了一个对象锁之后,如果它需要等待某个条件发生才能继续执行,那么它就会调用这个对象上的wait()函数来等待条件发生。当条件发生时,它就会被唤醒,继续执行。

如果有多个线程正在等待同一个对象锁上的wait()函数,那么当条件发生时,只有一个线程能够被唤醒。而notifyAll()函数会唤醒所有正在等待这个锁的线程,让它们都可以去检查条件是否满足,如果满足就继续执行,如果不满足就继续等待。

总结一下:

start()函数用于启动一个线程。

join()函数用于等待一个线程执行完毕后,再继续执行。

isAlive()函数用于判断一个线程是否还在运行。

sleep()函数用于让一个线程休眠一段时间。

notifyAll()函数用于唤醒所有正在等待某个对象锁的线程。