线程有关的几个方法

  • start() # 创建线程 注意事项见后
  • run() # 线程的执行部分 run()执行完则线程结束
  • sleep() # 休眠 单位是毫秒
  • setPriority(int n) # 1~10 默认5 调度可能更频繁 但不确保一定先执行
  • join() # 等某个线程结束后再运行 t.join()等待t

    三种创建并使用线程的方式

    自定义Thread的派生类并重写run方法

    public class Thread_p {
      public static void main(String[] args){
          System.out.println("Main Thread");
          Thread t=new MyThread();
          t.start();
      }
    }
    class MyThread extends Thread{
      public void run(){
          System.out.println("Hello World!");
      }
    }

    创建Thread实例时,传入一个Runnable实例

    public class Thread_p {
      public static void main(String[] args){
          System.out.println("Main Thread");
          Thread t=new Thread(new MyRunnable());
          t.start();
      }
    }
    class MyRunnable implements Runnable{ //接口
      public void run(){
          System.out.println("Hello World!");
      }
    }

    第三种方法

    public class Thread_p {
      public static void main(String[] args){
          System.out.println("Main Thread");
          Thread t=new Thread(){
              public void run(){
                  System.out.println("New Thread");
              }
          };
          t.start();
      }
    }

    注意事项

  • 一个实例仅能调用一次start()方法,执行内容写在run()种,但实例直接调用run()是不能创建线程的
  • 线程调度是系统执行的,程序本身不能决定调度顺序

    线程等待

    线程的几个状态

  • New:新创建的线程,尚未执行;
  • Runnable:运行中的线程,正在执行run()方法的Java代码;
  • Blocked:运行中的线程,因为某些操作被阻塞而挂起;
  • Waiting:运行中的线程,因为某些操作在等待中;
  • Timed Waiting:运行中的线程,因为执行sleep()方法正在计时等待;
  • Terminated:线程已终止,因为run()方法执行完毕。

    t.join()等待t结束后再运行(需要捕获)

    public class Thread_p {
      public static void main(String[] args) throws InterruptedException{
          System.out.println("Main Thread");
          Thread t=new MyThread();
          t.start();
          t.join();
          System.out.println("Main return");
      }
    }
    class MyThread extends Thread{
      public void run(){
          System.out.println("new Thread");
      }
    }

    sleep()休眠

    public class Thread_p {
      public static void main(String[] args) throws InterruptedException{
          System.out.println("Main Thread");
          Thread t=new MyThread();
          t.start();
          System.out.println("Main return");
      }
    }
    class MyThread extends Thread{
      public void run(){
          int i=1;
          System.out.println("new Thread");
          while (true){
              System.out.println(i);
              i++;
              try{
                  MyThread.sleep(1000);
              }catch (InterruptedException e) {};
          }
      }
    }

    注意事项

  • 如果t线程已经结束,对实例t调用join()会立刻返回。此外,join(long)的重载方法也可以指定一个等待时间,超过等待时间后就不再继续等待。

    中断线程

public class Thread_p {
    public static void main(String[] args) throws InterruptedException{
        System.out.println("Main Thread");
        Thread t=new MyThread();
        t.start();
        Thread.sleep(3);
        t.interrupt();
        t.join();
        System.out.println("Main return");
    }
}
class MyThread extends Thread{
    public void run(){
        int i=1;
        System.out.println("new Thread");
        while (!isInterrupted()){
            System.out.println(i);
            i++;
/*            try{
                MyThread.sleep(1000);
            }catch (InterruptedException e) {};*/
        }
    }
}
最后修改:2021 年 12 月 02 日
如果觉得我的文章对你有用,请随意赞赏