线程的实现方式总共有4种,第一种是继承Thread抽象类;第二种是实现Rannable接口;第三种是实现Callable接口;第四种是通过线程池创建线程。
1.继承Thread
继承Thread类,并重写run方法,调用start()方法启动线程。
2.实现Rannable接口
实现Rannable接口,重写其中的run方法,调用start()方法启动线程。
3.实现Callable接口
实现Callable接口,重写其中的call方法,调用start()方法启动线程。
4.通过线程池创建
线程池可以自动创建也可以手动创建,自动创建体现在Executors工具类中,常见的可以创建newFixedThreadPool、newCachedThreadPool、newSingleThreadExecutor、newScheduledThreadPool;
public static void main(String[] args) throws InterruptedException {
StringBuffer sb =new StringBuffer();
Thread t1 = new Thread(){
@Override
public void run() {
for (char c ='A';c<='E';c++){
sb.append(c);
}
}
};
Thread t2 =new Thread(new Runnable() {
@Override
public void run() {
for (char i = 'a'; i <='e' ; i++) {
sb.append(i);
}
}
});
Thread t3 =new Thread(new FutureTask<String>(new Callable<String>() {
@Override
public String call() throws Exception {
for (int i = 1; i <=5 ; i++) {
sb.append(i);
}
return sb.toString();
}
}));
ExecutorService executorService = Executors.newFixedThreadPool(5);
executorService.execute(new Runnable() {
@Override
public void run() {
char[] array ={'!','@','#','$','%'};
for (int i = 0; i <array.length ; i++) {
sb.append(array[i]);
}
}
});
executorService.shutdown();
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.println(sb);
}