a.实现Runnable接口,创建Thread类,重写run()方法,调用start方法
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start();
}
static class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Execting...");
}
}
b.继承Thread类,创建对象重写run方法,调用start()方法
public static void main(String[] args) {
Thread thread = new MyThread();
thread.start();
}
static class MyThread extends Thread {
@Override
public void run() {
System.out.println("Executing...");
}
}
c.线程池:
//不限数量的线程池
ExecutorService pool = Executors.newCachedThreadPool();
//固定数量的线程池
ExecutorService pool2 = Executors.newFixedThreadPool(int nThreads);
//有计划的线程池,可以延迟执行
ExecutorService pool3 = Executors.newScheduledThreadPool();
//单一线程的线程池
ExecutorService pool4 = Executors.newSingleThreadExecutor();
pool.execute(new Runnable() {
@Override
public void run() {
}
});
d.实现Callable接口,和Runnable的区别是其有返回值,而且可以取消(Runnable是interruput中断)
public static void main(String[] args) throws InterruptedException, ExecutionException {
FutureTask<String> futureTask = new FutureTask<String>(new MyCallable());
Thread thread = new Thread(futureTask);
thread.start();
/*
* 该方法会让该任务取消执行
* futureTask.cancel(true);
*/
String string = futureTask.get();
System.out.println(string);
}
static class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
return "Executing...";
}
}
e.TimerTask定时线程任务
TimerTask timeTask = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(timeTask, delay, period);