方法
Join
调用方线程(调用join方法的线程)执行等待操作,直到被调用的线程(join方法所属的线程)结束,再被唤醒public final void join() throws InterruptedException {join(0);}
public class JoinDemo extends Thread{int i;Thread previousThread; //上一个线程public JoinDemo(Thread previousThread,int i){this.previousThread=previousThread;this.i=i;}@Overridepublic void run() {try {//调用上一个线程的join方法,大家可以自己演示的时候可以把这行代码注释掉// thread.join的含义是// 当前线程需要等待previousThread线程终止之后才从thread.join返回。// 简单来说,就是线程没有执行完之前,会一直阻塞在join方法处。previousThread.join(); //} catch (InterruptedException e) {e.printStackTrace();}System.out.println("num:"+i);}public static void main(String[] args) {Thread previousThread=Thread.currentThread();for(int i=0;i<10;i++){JoinDemo joinDemo=new JoinDemo(previousThread,i);joinDemo.start();previousThread=joinDemo;}}}
yield
使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了。
Sleep
interrupt
interrupt不会真正停止一个线程,它仅仅是给这个线程发了一个信号告诉它,它应该要结束了(明白这一点非常重要!)
- 也就是说:Java设计者实际上是想线程自己来终止,通过上面的信号,就可以判断处理什么业务了。
- 具体到底中断还是继续运行,应该由被通知的线程自己处理
```java
Thread t1 = new Thread( new Runnable(){
public void run(){
} } ).start();// 若未发生中断,就正常执行任务while(!Thread.currentThread.isInterrupted()){// 正常任务代码……}// 中断的处理代码……doSomething();
```
再次说明:调用interrupt()并不是要真正终止掉当前线程,仅仅是设置了一个中断标志。这个中断标志可以给我们用来判断什么时候该干什么活!什么时候中断由我们自己来决定,这样就可以安全地终止线程了!
所以说:interrupt方法压根是不会对线程的状态造成影响的,它仅仅设置一个标志位罢了
interrupt线程中断还有另外两个方法(检查该线程是否被中断):
- 静态方法interrupted()—>会清除中断标志位
- 实例方法isInterrupted()—>不会清除中断标志位
交替打印字符+数字
https://blog.csdn.net/u011514810/article/details/77131296

