要想搞明白这个问题,首先必须理解 线程的本质
package com.linkage.deadlock;
public class Demo1 implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
System.out.println("执行线程");
}
}
public static void main(String[] args) {
Thread t1=new Thread(new Demo1());
Thread t2=new Thread(new Demo1());
Thread t3=new Thread(new Demo1());
Thread t4=new Thread(new Demo1());
t1.start();
t2.start();
t3.start();
t4.start();
}
}
debug main 程序,系统启动一个线程
当Main程序执行完后 :
上述说明: Main 函数本事是一个线程, 与Main程序内启动的线程 是并行的
如果先线程内,启动线程, 其实是启动平行的线程,相互执行不存在依存关系
线程本质是CPU去执行 一段代码片段,如果没有syncorinied,没有共同处理的对象,那么线程与线程直接直接是没有关系的
Thread sleep是静态方法的好处:
1、sleep是静态方法,那么在实现Runnable的线程类也能调用。
2、sleep是静态方法,所以sleep时候只是让出了cup却不能释对象锁,因为获取不到对象。
3、线程和实例并不是对等的,不是一个线程是一个实例,是你创建的实例继承了Thread或者Runable,实现了run(),并调用start()的时候能执行多个线程,实例还是一个,线程却是多个。所以实例休眠线程就休眠了这个假设不成立。