多线程1
1 Java程序运行原理
java 命令会启动 java 虚拟机,启动 JVM,等于启动了一个应用程序,也就是启动了一个进程。该进程会自动启动一个 “主线程” ,然后主线程去调用某个类的 main 方法。所以 main方法运行在主线程中。在此之前的所有程序都是单线程的。
2 jvm 是多线程的
JVM启动至少启动了垃圾回收线程和主线程,所以是多线程的。
3 线程中断
首先我创建一个线程,然后重写run方法,然后让该线程休眠10S钟
public class ThreadStop extends Thread { @Override public void run() { System.out.println("开始执行:" + new Date()); try { Thread.sleep(10000); } catch (InterruptedException e) { // e.printStackTrace(); System.out.println("线程被终止了"); } System.out.println("结束执行:" + new Date()); } }
然后我在测试类中,当线程睡眠了3S种,直接停止线程
public class ThreadStopDemo { public static void main(String[] args) { ThreadStop ts = new ThreadStop(); ts.start(); // 你超过三秒不醒过来,我就干死你 try { Thread.sleep(3000); // ts.stop(); ts.interrupt(); } catch (InterruptedException e) { e.printStackTrace(); } } }
4 线程的生命周期
首先,我们创建了一个线程,调用该线程对象的start方法,此时线程的状态是就绪状态,首先说一下cpu,cpu在同一个时间段,只能运行一个线程,所以当这个线程A抢到了cup的执行权,那么它由就绪状态转别成运行状态,如果线程A运行完了,那么线程A结束,变成死亡状态,如果线程A没有运行完,但是这个时候线程B抢到了CUP的执行权,那么线程A从运行状态转变成就绪状态,如果线程A在运行的时候,被调用了等待,或者睡眠的方法,那么这个时候,线程状态编程阻塞状态,然后当过了休息的时间段之后,成为就绪状态,重新抢夺cpu的执行权。