-
Thread:继承Thread类,重写 run() 方法,实例化后调用 start() 方法
-
Runnable:实现Runnable接口,重写 run() 方法,传入Thread类的构造函数中,然后调用Thread类的 start() 方法
-
Callable:实现 Callable 接口,重写 call() 方法,传入FutureTask类的构造函数中,然后将FutureTask的实例传入Thread类的构造函数中,然后调用Thread类的 start() 方法
public class MyThread {
public static void main(String[] args) {
//1.Thread
new Thread(){
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}.start();
//2.Runnable
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}).start();
//3.Callable
new Thread(new FutureTask<String>(new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println(Thread.currentThread().getName());
return Thread.currentThread().getName();
}
})).start();
}
}
常用线程方法释义
- yield():线程让步,让当前线程从运行态变成就绪状态
- sleep(long):线程暂停指定毫秒数,会让当前线程从运行状态变成阻塞状态,暂停指定毫秒数后进入就绪状态,该方法不会释放锁
- interrupt():中断线程,但是不会立即中断线程,而是改变线程的中断状态
- join():等待线程死亡,比如main线程中调用了子线程 t1.join(),则main线程阻塞,等待 t1 线程执行结束才能继续执行
- wait():Object类中的方法,调用任何对象的 wait() 方法会让当前线程进入等待状态,直到另一个线程调用同一个对象的notify() 或者 notifyAll() 方法
- notify():Object类的方法,唤醒因调用这个对象 wait() 方法而阻塞的线程
- notifyAll():Object类的方法,唤醒所有暂停的线程