Thread.join()
多线程启动,默认都是并行运行的,如果需要一个线程结束运行后再运行其他的, Thread.join()/Thread.join(1000ms),可以解决!
Thread t1 = ...
Thread t2 = ...
t1.start();
t1.join();//等待t1运行结束
t2.start();//如果没有t1.join();则两个线程是同时启动运行的;
Thread.yeild()
运行线程愿意让出运行权,供其他线程(也包括本线程)竞争处理器执行权。
Object.wait()
- 持有对象锁的线程可以invoke,本线程释放对象锁(后续并不会去主动竞争锁,即便锁已经被释放)停止执行后续代码,正常情况下直到其他线程调用同一个锁的notify()或notifyAll()后并且重新获取到锁后才会继续往下执行。
- wait(1000ms),另外加上了一个继续执行条件(过了指定时间后会主动竞争锁)。
Object.notify()
持有对象锁的线程可以invoke,随机通知一个等待该锁的线程去竞争锁(即使没有立即竞争到锁,等到锁被释放了,最终还是可以获得锁继续执行下去),其他等待锁的线程不会去竞争锁,除非被通知到才会有改变。
Object.notifyAll()
持有对象锁的线程可以invoke,通知所有等待该锁的线程去竞争锁。