转载请注明出处:https://oldnoop.tech/c/143.html
继承Thread类创建线程
Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。
启动线程的唯一方法就是通过Thread类的start()实例方法。
start()方法是一个native方法,它将启动一个新线程,并执行run()方法。
这种方式实现多线程很简单,通过自己的类直接extend Thread,重写run()方法,
就可以启动新线程并执行自己定义的run()方法。
例如:
public class MyThread extends Thread {
public void run() {
System.out.println("MyThread");
}
}
MyThread t1= new MyThread();
MyThread t2= new MyThread();
t1.start();
t2.start();
实现Runnable接口创建线程
如果已经extends另一个类,就无法直接extends Thread,此时,可以实现一个Runnable接口
一般情况下,也是推荐 实现Runnable接口的方式,因为 继承了Thread类,就不能继承其他父类了
public class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println("MyThread.run()");
}
}
为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例
Thread t = new Thread(new MyThread());
t.start();
实现Callable接口
通过FutureTask包装器来创建Thread线程
Callable接口定义如下:
public interface Callable<V> {
V call() throws Exception;
}
代码示例:
Callable<V> call= new SomeCallable<V>();
FutureTask<V> task= new FutureTask<V>(call);
Thread t= new Thread(task);
t.start();
使用线程池创建线程
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.execute(new Runnable(){
public void run(){
System.out.println("通过线程池方式创建的线程id:" +
Thread.currentThread().getId() );
}
});