1.主线程(Main线程) Java语言的一大特性是内置了对多线程的支持。多线程是指一个应用程序中同时存在几个执行。 每个Java程序都有一个缺省的主线程。我们都知道,Java程序的执行总是从main函数开始执行的。当JVM加载代码,发现main之后,就会启动一个线程,这个线程称为“主线程”。那么在main方法执行中再创建线程,就称为程序中的其他线程。如果main方法中没有创建其他的线程,那么main执行完最后一条语句之后,JVM就会结束java应用程序。如果main线程又创建了别的线程,则JVM就会在主线程和其他线程之间切换,保证每个线程都有机会得到CPU资源,JVM需要等到所有的线程都执行结束后,才结束java程序。
2线程的状态和生命周期 java语言使用Thread类或者其子类表示线程。新建的线程在他的一个完整的生命周期通常要经历如下4种状态。 * 1.新建* 当一个Thread类或其子类的对象被声明或者创建时,新生的线程对象处于新建状态。此时它已经有了相应的内存空间和其他资源。 2.运行 线程创建之后就具备了运行的条件。一旦轮到它来享用CPU资源时,此线程就可以脱离创建他的主线程开始自己的生命周期了。 线程创建之后仅仅是占用了内存资源,在JVM管理的线程中还没有这个线程,此线程必须调用start()方法通知JVM,这样JVM就会知道又有一个新的线程排队等候切换了 3.中断 有4中原因导致线程的中断 - JVM将CPU资源切换给其他线程,使本线程让出CPU使用权处于中断状态。 - 线程使用CPU期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状态。线程一旦执行sleep方法,就会立即让出CPU使用权,使当前线程处于中断状态。经过参数millsecond指定的毫秒数之后,该线程重新进入到线程队列中等待CPU资源。 - 线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态。等待状态的线程不会主动进程队列中等待CPU资源,直到使用notify()方法通知它,使得它重新进入到线程队列中排队等到CPU资源。 - 线程使用CPU资源期间,执行某个操作进入阻塞状态。比如读写操作引起阻塞。进入阻塞状态时线程不能进入排队队列,只有当引起阻塞的原因消除时,线程才会重新进入到线程队列中排队等待CPU资源。 4.死亡 处于死亡状态的线程不具有运行的能力。处于死亡状态you两个原因: - 正常运行的线程完成它的全部工作,即执行完run()方法的全部语句 - 线程被提前强制性终止。 死亡状态的线程释放了分配给线程的内存。
例子: package com.imooc.concurrent;
public class Test_Thread { public static void main(String[] args) { //创建线程 Dog dog = new Dog(); Cat cat = new Cat(); //启动线程 dog.start(); cat.start(); for(int i=0;i<10;i++){ System.out.println(“main” + i); } } } class Dog extends Thread{ public void run(){ for(int i = 0;i<20;i++){ System.out.println(“dog”+i); } } } class Cat extends Thread{ public void run(){ for(int i = 0;i<20;i++){ System.out.println(“cat”+i); } } }
注释:关于线程的创建以及常用方法介绍,请看下一篇博客。