Java多线程函数:start()、join()、isAlive()、sleep()、notifyAll()
一、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()函数用于唤醒所有正在等待某个对象锁的线程。
