Java多线程--线程常用方法

2021-04-28  本文已影响0人  轻轻敲醒沉睡的心灵

当使用多线程时,和业务系统结合,有时需要适当的调用线程一些方法,做一些调控。下面介绍一些常用方法及场景。

1. start()

线程启动方法,一般创建新线程后直接调用启动新线程。

2. join()

很多情况下,在主线程中起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束。但是如果主线程的业务需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再进行,这个时候就要用到join()方法了。
这个时候,主线程join()方法后面的代码要等到子线程结束了才会继续执行。

Thread t = new Thread();
t.start(); 
t.join();
System.out.println(123);

3. sleep(long millis)

millis参数设定睡眠的时间,以毫秒为单位。线程睡眠,使线程转到阻塞状态,睡眠期间会让出CPU的执行权,去执行其它线程,同时CPU也会监视睡眠的时间,当睡眠结束后,就转为就绪(Runnable)状态。因sleep()是Thread类的Static(静态)方法,所以线程虽然休眠了,但是对象的锁并木有被释放。

4. yield()

yield()是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。
注意:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。

5. interrupt()

唤醒正在睡眠的程序,调用interrupt()方法,会使得sleep()方法抛出InterruptedException异常,当sleep()方法抛出异常就中断了sleep的方法,从而让程序继续运行下去

6. wait()notify()(notifyAll())

wait()notify()notifyAll()方法是Object类的final native方法,这些方法不能被子类重写。另外它们必须要与synchronized(Obj)一起使用,也就是waitnotify是针对已经获取了Obj锁进行操作,从语法角度来说就是wait(),notify()必须在synchronized(Obj){...}语句块内。

wait和notify例子:https://www.liaoxuefeng.com/wiki/1252599548343744/1306580911915042


注意:sleep与wait的区别

上一篇下一篇

猜你喜欢

热点阅读