1,进程
对于一个CPU来讲在某一个时间点指定执行一个进程,操作系统会为每个进程分配一段有限的cpu使用时间2,线程
每个程序都是一个进程,进程里面还可以有多个执行单元同时运行,这些执行单元可以看作执行的一条条线程3,线程的创建
//第一种方法:通过继承Thread类来进行开启多线程package book;public class Threadtext { public static void main(String []args){ students stu=new students();//创建类的实例对象 stu.start();//开启students线程 while(true){ System.out.PRintln("我是main函数里面的输出语句"); } }}class students extends Thread{ public void run(){ while(true){ System.out.println("我是一个线程"); } }}//第二种方法:通过类实现Runnable接口,然后开启start();方法启动package book;public class Threadtext2 { public static void main(String[] args) { // TODO 自动生成的方法存根 student stu=new student();//创建类的实例对象 Thread th=new Thread(stu);//创建线程对象并把类的实例对象传入 th.start(); while(true){ System.out.println("我是主方法线程"); } }}class student implements Runnable{ public void run(){ while(true){ System.out.println("我是一个线程"); } }}4,两种方法的对比
1,通过继承thread类开启的进程必须要进行实例化才能进行开启,在进行实例化的时候就必须创建了一个对象,如果开启对个实例化对象,那么每个都会重复地开启线程,所以不能在进行资源统一的时候使用2,实现Runnable接口的话仅仅开启线程的话,在开启一个新的线程的话参数传入的都是同一个实例对象,所以多个实例化对象使用的资源都是统一的3,由于java是单继承,所以在继承了Thread类后无法再次继承其他的类所以不建议使用第一种方法5,线程的生命周期及状态转换
1,新建状态:在创建一个线程对象后,该线程就处于新建状态,他此时不能够运行,和其他的java程序一样,仅仅由java虚拟机为其分配了内存,但是没有表现出任何线程的动态信息。2,当线程调用了start方法后,该线程就进入了继续状态,也称作可运行状态,处于就绪状态的线程位于可运行池中,此时他仅仅是具备了可运行的条件,能否获得cpu使用权还需要等待系统进行调度。3,就绪状态:获得了cpu使用权,开始执行Run方法中的线程执行体,该线程处于运行状态。4,堵塞状态:正在运行的情况下,如执行耗时的输入、输出操作时就会放弃cpu的使用权力,线程进行堵塞状态后不能进入排队队列,只有当引起堵塞的因素消除后,线程才可能进入到就绪状态。5,死亡状态:线程中的run方法正常执行完毕,或者线程抛出一个未捕获的异常,错误,线程就会进入死亡状态,一旦进入死亡状态线程就不会再次拥有运行的资格,也不能转换到其他状态; 6,线程的调度
新闻热点
疑难解答