public class{
public static void main(String[] args){
m1();
}
public static void m1(){
m2();
m3();
}
public static void m2(){}
public static void m3(){}
}
输出结果
程序执行流程
线程执行图
线程相关问题
1.线程是一个程序里不同的执行路径
2.每一个分支都是线程,你看我们的mian方法,就是主分支,又叫主线程。
3.什么叫真正的线程? 你的cpu是双核的,确确实实时多线程
4.Web浏览器执行后也是多线程的? 是的,你看你可以通过web听音乐,玩网页游戏。
5.线程启动 必须使用 start这个方法,因为它会通知CPU,我现在有个新线程啦。你老人家什么时候给我点时间片,呵呵。
进程和线程
1..进程是一个静态的概念, 在我们机器里运行的是线程,机器上运行的一个 class、exe文件,这叫做一个进程。
2.有人说进程是一个可以执行的, 这个严格来说是不正确的,
3.我们用的 XP系统有多少个进程? 这个不好说,少说有20多个进程吧。 doc下的系统,是单进程的。 在同一时间点只能有一个进程能运行,
XP 多线程多进程单用户, linux多线程多进程多用户
其他话题:只要能使用接口,就不要使用从Thread继承。
2.一般程序先执行子线程,再执行主线程(方法调用)
public class TestThread {
public static void main(String args[]){
Runner1 r = new Runner1();
//r.run();
Thread t = new Thread(r); //把 Thread 和t.start(); 注释掉,使用r.run ,会先执行run中的结果
t.start(); //线程启动 必须使用 start这个方法。
for(int i=0; i<100; i++){
System.out.println("Main Thread:--------" + i);
}
}
}
class Runner1 implements Runnable{
public void run(){
for(int i=0; i<100; i++){
System.out.println("Runner1 :" + i);
}
}
}
输出结果为:并行运行
。。。。。省略, 后面是<100的运行
图解:并行运行
三、 线程的创建和启动
1实现Runnable接口(常用)
设计一个实现Runable接口的类,根据需要重写run方法;
建立该类的对象,以此对象为参数建立Thread类的对象;
调用Thread类对象start方法启动线程,将执行权转交到run方法。
2继承Thread类
定义一个从Thread类继承的子类并重写其run方法
然后生成该类的对象,调用Thread类对象start方法启动线程