join方法
join()方法是让当前线程阻塞.通俗的话说,就是在哪个线程调用哪个线程就阻塞,让调用join方法的线程在它前面执行完.join方法你可以将它想象为"插队",他不能保证哪个线程先开始.但是了以保证哪个线程先结束.
给大家看个例子:
只有当线程t1结束,只能是main将标志位设置为false,但是显然是不可能的,线程t1,无限循环,所以这个方法就不可能结束.
interrupt方法
interrupt方法分两种情况:
1.如果当前线程内部执行的逻辑不涉及sleep这样的等待,此时就会通过标记为来退出.
2.如果当前线程内部执行的逻辑涉及到了sleep这样的等待,就会触发中断异常,通过catch语句捕捉到异常,在自行处理.(我在这块的处理是加了break);
代码如下:
第一种情况:
第二种情况:
sleep方法
前面我们都用了这么多次sleep都没说他是干什么的,其实它就是让当前的线程"睡觉"了,就进入了阻塞状态,单位是ms.
wait()方法
其实wait()方法就是使线程停止运行.
1.方法wait()的作用是使当前执行代码的线程进行等待,wait()方法是Object类的方法,该方法是用来将当前线程置入“预执行队列”中,并且在wait()所在的代码处停止执行,直到接到通知或被中断为止。
2.wait()方法只能在同步方法中或同步块中调用。如果调用wait()时,没有持有适当的锁,会抛出异常
3. wait()方法执行后,当前线程释放锁,线程与其它线程竞争重新获取锁
notify方法
notify方法就是使停止的线程继续运行
- 方法notify()也要在同步方法或同步块中调用,该方法是用来通知那些可能等待该对象的对象锁的其它线程,对其发出通知notify,并使它们重新获取该对象的对象锁。如果有多个线程等待,则有线程规划器随机挑选出一个呈wait状态的线程.
- 在notify()方法后,当前线程不会马上释放该对象锁,要等到执行notify()方法的线程将程序执行
完,也就是退出同步代码块之后才会释放对象锁