常用方法:

  1. yield:线程的礼让。让出cpu,让其他线程执行,但礼让的时间不确定,所以也不一定礼让成功(一般资源紧张的时候礼让会成功)
  2. join: 线程的插队。插队的线程一旦插队成功,则肯定先执行完插入的线程所有的任务

案例:

需求:

main线程创建一个子线程,每隔1s输出hello,输出3次,主线程每隔1秒,输出hi,输出3次.要求:两个线程同时执行,当主线程输出1次后,就让子线程运行完毕,主线程再继续,

实现:

  1. package test;
  2. /**
  3. * 演示线程终止
  4. */
  5. public class Main {
  6. public static void main(String[] args) throws InterruptedException {
  7. T t = new T();
  8. t.start();
  9. for(int i = 1; i <= 5; i++){
  10. Thread.sleep(1000);
  11. System.out.println("hi");
  12. if(i == 1){
  13. //join, 线程插队
  14. t.join();//这里相当于让t 线程先执行完毕
  15. //Thread.yield();//礼让,不一定成功..
  16. }
  17. }
  18. }
  19. }
  20. class T extends Thread{
  21. int count = 0;
  22. @Override
  23. public void run() {
  24. while(true){
  25. System.out.println("hello " + (++count));
  26. try {
  27. Thread.sleep(1000);
  28. } catch (InterruptedException e) {
  29. e.printStackTrace();
  30. }
  31. if(count == 5){
  32. break;
  33. }
  34. }
  35. }
  36. }

image.png
image.png