1、可以直接调用java类Thread,并重写里面的run()方法,但是这并没有在进程中开辟一个新的空间。就算调用了run方法,也只是在主线程下压栈。调用start()方法的时候,进程会短暂开辟一个新的空间作为新的支栈,开辟完成之后就会销毁,并且调动机制会自动执行run方法,代码继续执行。
public static void main (String[] args){
Mythread m = new Mythread();
m.start();
}
class Mythread extends Thread{
@Override
public void run() {
实现代码
}
}
2.表示编写实现线程方法。
对Runnable接口的实现,作为Thread的匿名内部类 来启动。
public static void main (String[] args){
Mythread m = new Mythread(new Myrunnable);
m.start();
}
class Myrunnable implements Runnable{
@Override
public void run() {
实现代码
}
}
3、FutureStask这个继承了runnable接口,并且可以返回线程run的结果。返回的结果可以在主线程中调用,但是调用必须等待支线程的结束,会造成阻塞。
FutureTask futureTask = new FutureTask(new Callable() {
@Override
public Object call() throws Exception {
Thread.sleep(1000 * 10);
return 100 + 200;
}
});
Thread t1 = new Thread(futureTask);
t1.start();
try {
Object o = futureTask.get();//阻塞10秒才会获取到
System.out.println(o);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}