创建多线程的第一种方式:
继承Thread类
class A extends Thread {
@Override
public void run() {
System.out.println("线程A执行了");
}
}
创建线程的第二种方式:
实现Runnable接口
static class B implements Runnable {
@Override
public void run() {
System.out.println("线程B执行了");
}
}
创建线程的第三种方式:
利用ExecutorSevice和Callable创建带返回值的线程
static class C {
public static void main(String[] args) {
//第一步:创建一个指定数量的(5)线程池(有了劳动力了)
int threadSize = 5;
ExecutorService pool = Executors.newFixedThreadPool(threadSize);
//第二步、给劳动力分配任务(Task)
List<Future> list = new ArrayList<>();
for (int i = 0; i < threadSize; i++) {
Callable callable=new com.gpdi.security.MyCallable(i+"");
Future future=pool.submit(callable);
list.add(future);
}
pool.shutdown();
list.forEach((f)->{
try {
System.out.println( "取出来的都是什么妖魔鬼怪"+f.get());
}catch (Exception e){
}
});
}
//具体的处理细节交给Call类进行完成
class MyCallable implements Callable<Object> {
private int threadNumber;
public MyCallable(int threadNumber) {
this.threadNumber = threadNumber;
}
@Override
public Object call() throws Exception {
System.out.println(">>>" + threadNumber + "任务启动");
Date dateTmp1 = new Date();
Thread.sleep(10000);
Date dateTmp2 = new Date();
long time = dateTmp2.getTime() - dateTmp1.getTime();
System.out.println(">>>" + threadNumber + "任务终止");
return threadNumber + "任务返回运行结果,当前任务时间【" + time + "毫秒】";
}
}
}
创建多线程的第四种方式:
利用Lambda创建一个多线程
static class D {
public void main(String[] args) {
new Thread(() -> {
System.out.println("利用lambda多线程D");
}).start();
Runnable runnable=()->{
System.out.println("利用lambda多线程D1");
};
runnable.run();
}
}