一丶多线程并发的理解?
1.1.对于单核的cpu来说真的可以做到真正的多线程并发吗?什么是真正的多线程并发,t1线程执行t1,t2的线程执行t2,t1不会影响t2,t2也不会影响t1,这叫多线程并发,单核cpu做不到多线程并发,但是可以给人一种"多线程并发的感觉",例电影胶卷,人反应速度慢所以造成假象。
1.2.分析程序有几个线程,见图1。
二丶实现线程的第一种方式?
2.1.该类去继承Thread,重写run方法,这是第一种,见图2。
三丶run和start的区别?
3.1.run()方法不会进行并发执行,而是依照自上而下,上面程序未结束那么下面的程序就不会执行,不会并发, 而start()方法会额外开辟新的栈内存,并且该方法瞬间结束,然后主线程与分支线程里的run()方法同时进行,完成并发并行。
public class Test01 {
public static void main(String[] args){
Test01 test01 = new Test01();
test01.test();
}
/*
除垃圾回收机制外该线程有几个线程?当次只有一个线程。图一
*/
public static void test(){
System.out.println("t begin");
m1();
System.out.println("t over");
}
private static void m1() {
System.out.println("m1 begin");
m2();
System.out.println("m1 over");
}
private static void m2() {
System.out.println("m2 begin");
m3();
System.out.println("m2 over");
}
private static void m3() {
System.out.println("m3 execute");
}
}
//图二
public class Test02 {
public static void main(String[] args){
MyThrea myThrea = new MyThrea();
myThrea.start();
/*该start一执行瞬间结束,作用用来开辟新的栈空间,如果直接调用run()方法那么不会启动新的线程
且做不到并发
*/
for(int i = 0;i <= 1000;i++){
System.out.println("主线程---------》" + i);
}
}
}
class MyThrea extends Thread{
//继承Tread重写run方法
public void run(){
for(int i = 0;i <= 1000;i++){
System.out.println("分支线程---------》" + i);
}
}
}