多线程常用方法
多线程常用方法
1、线程的基础方法
1、wait()
wait()方法为 Object 类中的方法,为 final 方法无法被重写。
调用某个对象的 wait()方法可以让当前线程阻塞,进入等待队列,并且当前线程必须拥有此线程的锁,wait()方法会释放锁。
2、notify()
notify()方法与 wait()方法相似,同样为 Object 类中的 final 方法, 无法被重写。
调用某个对象的 notify()方法,可以唤醒一个正在等待获取当前对象的锁的线程。如果有多个线程在等待时,则会随机唤醒一个。
3、notifyAll()
notifyAll()方法与 notify()方法相似,区别在于 notifyAll()方法会唤醒所有等待当前对象的锁的线程。
4、sleep()
sleep()方法为 Tread 类中的方法,sleep()方法可以让当前线程暂停一段时间,时间结束后继续等待 cpu,获取到 cpu 后继续执行。
sleep()方法与 wait()的区别是,sleep()方法不会释放对象的锁,只是暂时将 cpu 让出来,而 wait()方法则会释放对象的锁。
sleep()方法可以在任何地方使用,而 wait()方法必须在同步代码块内使用。
5、interrupt()
尝试中断线程。
该方法的目的是给线程发送中断信号,但不会真的中断该线程,被中断线程可以决定如何应对中断。
interrupt()方法不会中断一个正在运行的线程。获取锁的过程不能被中断。
线程再调用 wait()、sleep()、join()方法过程中受阻,会清楚中断状态,同时会抛出一个 InterruptedException 异常,用户可以捕获这个异常做一些其他处理。
6、interrupted()
判断当前线程是否已经中断,如果中断,则会清楚中断状态。连续调用两次该方法,第二次必定会返回 false。
7、isInterrupted()
判断线程是否已经中断,线程的中断状态不受此方法的影响。判断调用的线程。
8、join()
是一个同步方法,底层采用 wait()方法实现。线程启动后调用才会有效。
t.join() 必须获取 t 对象的锁,当前线程(当前在 cpu 上运行的线程)暂停(或一定的时间),等待 t 线程执行结束后,当前线程才能继续往下执行。
如果有时间传参,当前线程会等待固定时间,实际等待时间是获取 t 对象的锁的时间加传入的时间。
9、yield()
当对某个线程执行 yield()方法后,该线程会尝试暂停自己,会给同级的线程让道。yield()方法不稳定,无法确定具体的执行时间。