启动线程的三种⽅式⽂章⽬录
总统大选前⾔
启动线程⼀共有三种⽅法:继承类,实现接⼝,匿名内部类。
⼀、启动线程的第⼀种⽅法:继承Thread类
start()⽅法的作⽤是启动⼀个分⽀线程,在JVM中开辟⼀个新的栈空间。
只要新的栈空间,myThread.start()瞬间就结束了,线程就启动成功了。
启动成功的线程会⾃动调⽤run⽅法,并且run⽅法在分⽀线的栈底部。
形形色色什么意思代码如下(⽰例):
public class Thread01 {
public static void main(String[] args){
//创建线程对象
MyThread myThread =new MyThread();
//启动线程
myThread.start();
//主线程
for(int i =0; i <100; i++){
System.out.println("main主线程--->"+ i);
}
}
}
class MyThread extends Thread{
@Override
public void run(){
for(int i =0; i <100; i++){
lilo的时间System.out.println("分⽀线程---->"+ i);
}
托业报名
}
}
⼆、启动线程的第⼆种⽅式:实现Runnable接⼝
代码如下(⽰例):
public class Thread02 {
public static void main(String[] args){
//创建线程对象
Thread thread = new Thread(new MyRunnable());
//启动线程
thread.start();
//主线程
for(int i =0; i <100; i++){
System.out.println("main主线程--->"+ i);
}
}
}
class MyRunnable implements Runnable{
@Override
public void run(){
for(int i =0; i <100; i++){
System.out.println("分⽀线程---->"+ i);
}
}
}
实现接⼝启动线程是最常⽤的⽅法
也可以使⽤匿名内部类的⽅式启动线程
代码如下(⽰例):
public class Thread03 {
public static void main(String[] args){
Thread thread = new Thread(new Runnable(){
@Override
public void run(){
for(int i =0; i <1000; i++){
System.out.println("分⽀线程-->"+ i);书名号的作用
}
}
});
//启动线程
thread.start();
//主线程
for(int i =0; i <1000; i++){
System.out.println("main主线程--->"+ i);
}
}
}
三、启动线程的第三种⽅式:实现Callable接⼝
import urrent.Callable;
import urrent.ExecutionException;
柚子的副作用import urrent.FutureTask;
/***
* 启动线程的第三种⽅法:实现Callable接⼝,重写call()⽅法
*/
public class ThreadTest04 {
public static void main(String[] args){
//创建⼀个“未来任务类”对象
FutureTask futureTask = new FutureTask(new Callable(){
@Override
public Object call() throws Exception {//call()⽅法相当与run()⽅法,⽐run⽅法好,有返回值 System.out.println("call mothed begin!");
王菲歌Thread.sleep(1000*10);
System.out.println("call mothed over!");
int x =100;
篮球赛策划int y =200;
return x + y;//⾃动装箱
}
});
//创建线程对象
Thread t = new Thread(futureTask);
//启动线程
t.start();
Object obj = null;
//获得分⽀线程返回值
try {
//get()⽅法的执⾏会导致主线程的阻塞
obj = ();
} catch (InterruptedException e){
e.printStackTrace();
} catch (ExecutionException e){
e.printStackTrace();
}
System.out.println("获得分⽀线程的返回值:"+ obj );
//如下的代码会等到分⽀线程执⾏结束后,才回到主线程中继续执⾏
System.out.println("Hello CSDN");
}
}