Java的Thread的start(),run()和join()方法

来源:互联网 发布:苹果笔记本知乎 编辑:程序博客网 时间:2024/05/21 06:47

线程的创建:(来自于牛客网Java面试题)

1、继承Thread类

2、实现Runnable接口

3、应用程序可以使用Executor框架来创建线程池     高效, 容易实现

4、实现Callable接口

针对于Thread类的start(),run()和join()方法的说明

1、start();线程不会立即启动。相当于是在就绪队列里面。

2、run()线程立即启动。

3、join()在一个线程中启动另一个线程。

----------------------------------------------------------------------------------------

下面我将给出一段代码:大家可以先猜猜大概的输出情况:

public class JoinTest {


public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread thread = new MyThread("test join");
MyThread thread1 = new MyThread("join1");
thread.start();//线程进入就绪队列
thread1.run();//线程立即执行
try {
thread.join();//在main的主线程中启动thread线程
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i = 0;i<=10;i++){
System.out.println("I am main thread");
}
}


}
class MyThread extends Thread{
MyThread(String s){
super(s);
}
public void run(){
for(int i = 0;i<=10;i++){
System.out.println("I am a "+getName());
try{
sleep(1000);
}catch(InterruptedException e){
return;
}
}
}
}

程序说明:在main函数里面创建了两个自定义的线程thread和thread1,其中thread调用start()方法,进入就绪队列,然后thread1调用run()方法。即thread1的状态是运行中即就是Runnable,现在现处于Runnable的线程有两个一个是thread1,另一个是main的主线程。然后main主线程顺序执行到try语句当中遇到thread.join()方法。根据join()方法,意思是在main主线程当中启动thread,而且thread是出于就绪队列,等待CPU的调度就可以执行,现在join()方法给了它CPU的调度。但是thread的线程和thread1的线程的执行顺序是随机的。main函数的执行,必须要等到thread执行完才可以执行。这个是根据join()方法决定的。


当然这只是我的见解,如果有什么问题,欢迎大家指正哦。

原创粉丝点击