Java的Thread的start(),run()和join()方法
2017-09-12 19:55
369 查看
线程的创建:(来自于牛客网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()方法决定的。
当然这只是我的见解,如果有什么问题,欢迎大家指正哦。
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()方法决定的。
当然这只是我的见解,如果有什么问题,欢迎大家指正哦。
相关文章推荐
- Java Thread中start和run方法的区别
- java中Thread类中的start()方法与run()方法
- Java之Thread线程相关yield()、sleep()、wait()、join()、run和start区别详解
- Java-线程Thread方法start()和run()
- java Thread 类 run 和 start 方法区别
- Java -- Thread中start和run方法的区别
- Java -- Thread中start和run方法的区别
- Java多线程之Thread的run()与start()方法解析
- Java学习札记16:浅析 Thread 类中的 start() 和 run() 方法
- java之Thread线程相关yield()、sleep()、wait()、join()、run和start区别详解
- Thread.java start方法和run方法的区别
- java thread start()和run()方法简析
- java中Thread线程中的 start()和run()方法的区别
- java线程之start方法与run方法解析以及currentThread与this解析
- java中Thread类中的start()方法与run()方法
- java Thread类的run()方法以及start()方法
- java 多线程系列基础篇(八)之join()、start()、run()方法
- Java并发编程--Thread中start()与run()方法的区别概要
- Java中Thread类的start()方法和run()方法
- java Thread中,run方法和start方法的区别