四种创建线程的方式:
继承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对象。