1. 繼承Thread
Thread thread1 = new Thread(){
@Override
public void run() {
System.out.println("子線程"+new Date().getTime());
}
};
thread1.start();
System.out.println("結束!");
// 結束!
// 子線程1511245859986
2.實現Runnable接口
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("子線程:"+new Date().getTime());
}
};
new Thread(runnable).start();
System.out.println("結束!!!");
3. 實現Callable
public class MyCallable implements Callable<Long> {
@Override
public Long call() throws Exception {
Thread.sleep(2000);
return new Date().getTime();
}
}
public void test1(){
ExecutorService pool = Executors.newFixedThreadPool(15);
List<Future<Long>> results = new ArrayList<Future<Long>>();
MyCallable myCallable = new MyCallable();
for(int i=0;i<12;i++ ){
results.add(pool.submit(myCallable));
}
pool.shutdown();
for(Future future:results){
try {
Long times = (Long) future.get();
Date date = new Date(times);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(" "+ simpleDateFormat.format(date));
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
1)