案例:

需求:

  1. 请编写程序,开启一个线程,该线程每隔1秒。在控制台输出“我们一起学猫叫,一起喵喵喵喵喵~”
  2. 对上题改进:当输出10次“我们一起学猫叫,一起喵喵喵喵喵~”,结束该线程 ```java package test; /**

    • 演示通过继承Thread 类创建线程 / public class Main { public static void main(String[] args) throws InterruptedException { //创建Cat对象,可以当做线程使用 Cat cat = new Cat(); /

      1. (1)
      2. public synchronized void start() {
      3. start0();
      4. }
      5. (2)
      6. //start0() 是本地方法,是JVM调用, 底层是c/c++实现
      7. //真正实现多线程的效果, 是start0(), 而不是 run
      8. private native void start0();
      9. */

      cat.start();//启动线程-> 最终会执行cat的run方法 //cat.run();//run方法就是一个普通的方法, 没有真正的启动一个线程,就会把run方法执行完毕,才向下执行 //说明: 当main线程启动一个子线程 Thread-0, 主线程不会阻塞, 会继续执行 //这时 主线程和子线程是交替执行.. System.out.println(“主线程继续执行” + Thread.currentThread().getName());//名字main for(int i = 0; i < 5; i++) {

      1. System.out.println("主线程 i=" + i);
      2. //让主线程休眠
      3. Thread.sleep(1000);

      }

      } }

//1. 当一个类继承了 Thread 类, 该类就可以当做线程使用 //2. 我们会重写 run方法,写上自己的业务代码 //3. run Thread 类 实现了 Runnable 接口的run方法 class Cat extends Thread { int times = 0; @Override public void run() {//重写run方法,写上自己的业务逻辑 while (true) { //该线程每隔1秒。在控制台输出 “我们一起学猫叫,一起喵喵喵喵喵~” System.out.println(“我们一起学猫叫,一起喵喵喵喵喵~” + (++times) + “ 线程名=” + Thread.currentThread().getName()); try { //让该线程休眠1秒 ctrl+alt+t Thread.sleep(1000);//以毫秒为单位 } catch (InterruptedException e) { e.printStackTrace(); } if(times == 5) { break;//当times 到5, 退出while, 这时线程也就退出.. } } } } ``` image.png