1.单线程举例
public class Test {
public static void main(String[] args){
method2("yyzhang");
}
public static void method1(String str){
System.out.println("method1...");
System.out.println(str);
}
public static void method2(String str){
System.out.println("method2...");
method1(str);
System.out.println(str);
}
}
看似调用了多次函数,其实是单线程调用
2.多线程的创建与启动
- java语言的JVM允许程序运行多个线程,他通过java.lang.Thread类来实现
- Thread类的特性
- 每个线程都是通过某个特定的Thread对象的run()方法完成操作的,经常把run()方法的主体称为线程体
- 通过该Thread对象的start()方法来调用这个线程
通过查阅api可以得到,创建线程方法一是:- 创建一个继承Thread的类
- 重写Thread的run方法,方法内实现子线程需要实现的功能
- 创建一个子类的对象
- 调用线程的start方法
3.实例
/*
* 创建一个子线程,完成1-100之间自然数的输出,同样的
* 主线程执行同样的操作
* 创建多线程的第一种方式,继承java.lang.Thread类
*/
//1创建一个继承Thread的子类
class SubThread extends Thread{
//2.重写Thread的run方法,方法内实现子线程要实现的功能
public void run(){
for(int i=1;i<=100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
public class TestThread {
public static void main(String[] args) {
//3.创建一个子类的对象
SubThread st=new SubThread();
//4.调用线程的start方法,启动此线程,调用相应的run方法
//5.一个线程只能start一次
//6.直接调用run方法只有一个线程
st.start();
for(int i=1;i<=100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
运行结果:
我们可以看到打印的结果是两个线程是交替执行的。
4.需要注意的地方
- 一个线程只能start一次
将代码局部改为如图所示的样子。试着运行,可以得到:
试着在start方法中寻找答案,点击进去,发现
有一个threadStatus来指示运行的状态,它从根本上禁止了将一个线程运行多次 - 直接运行线程的run方法会发生什么?
试着将代码修改为
运行发现
只有一个Thread,那就是main。
5.参考资料
尚硅谷–继承方式创建多线程