四种创建线程的方式:

  继承Thread类

  实现Runnable接口

  实现Callable接口

  通过线程池创建

 

继承Thread类的方式创建新线程:
public class MyThread extends Thread{

    @Override
    public void run() {
        System.out.println("线程:"+Thread.currentThread().getName()+"继承Thread类");
    }

  public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }

}

 

实现Runnable接口的方式创建线程:
public class MyRunnable implements Runnable{

    @Override
    public void run() {
        System.out.println("线程:"+Thread.currentThread().getName()+"实现Runnable接口");
    }
  
public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); new Thread(myRunnable).start(); } }

 

Runnable接口只定义了一种方法:run()方法。这是每个线程的主方法。当执行start()方法启动线程时,它将调用run()方法。

Thread类其他常用方法:

  获取和设置Thread对象信息的方法:

    getId():该方法返回Thread对象的标识符。该标识符是在线程创建时分配的一个正整数。在线程的整个生命周期中是唯一且无法改变的。

    getName()/setName():这两种方法允许你获取或设置Thread对象的名称。这个名称是一个String对象,也可以在Thread类的构造函数中建立。

    getPriority()/setPriority():你可以使用这两种方法来获取或设置Thread对象的优先级。

    isDeamon()/setDeamon():这两种方法允许你获取或建立Thread对象的守护线程。

    getState():该方法返回Thread对象的状态。

  interrupt():中断目标线程,给目标线程发送一个中断信号,线程被打上中断标记。

  interrupted():判断目标线程是否被中断,但是将清除线程的中断标记。

  isInterrupted():判断目标线程是否被中断,不会清除中断标记。

  sleep(long ms):该方法将线程的执行暂停ms时间。

  join():暂停线程的执行,直到调用该方法的线程执行结束为止。可以使用该方法等待另一个Thread对象结束。

  setUncaughtExceptionHandler():当线程执行出现未校验异常时,该方法用于建立未校验异常的控制器。

  currentThread():Thread类的静态方法,返回实际执行该代码的Thread对象。