线程
1.什么是线程
1.进程
某一个应用程序在计算机中运行时计算机为该应用程序所分配的资源;在多任务计算机中一个计算机可以同时执行多个程序,也就是有多个进程;
2.线程
是进程中使用【利用】计算机为进程所分配的计算机资源进行数据计算的基本单位;一个进程中至少要包含一个线程,否则该进程无意义;线程具随机执行性,线程的运行时接受CPU调动的,当cpu调度到哪个线程就执行那个线程,并且一个cpu在某个时间片内【同一时刻】只能执行一个线程;形象的理解为线程在抢夺cpu资源,如果抢到了就执行;
3.多线程
当一个进程中多个线程“同时”执行,此现象称之为多线程;
4.java中线程体系:
1.Thread类:该类用于表示对线程的描述;
2.Runnable接口;实现了该接口的类并不是线程类,只是表示具有可运行性,能够被线程对象调用执行;
2.自定义线程和创建执行线程
1.继承Thread类;
0.默认的run方法的方法体为“空”,不会执行任何代码;
1.继承该类之后,需要重写该类中的Run()方法,将自定义的线程需要执行的代码写在run()方法中,在该线程被启动之后,线程就会去执行run()方法中的代码;
2.线程的启动时调用Thred类中的start()方法,而不能直接调run()方法,如果调用
3.java程序在执行的时候,jvm进程会启动一个线程来执行该程序的主方法,此线程称之为main线程【主线程,线程的名字就叫“main”】只有主线程在执行main方法的时候才能执行到main方法中定义的创建启动其他代码,如果启动了多个线程,则这些线程的名字是按照启动顺序从“Thread-0”到“Thread-N”;
4.在Thread类中的getName()方法可以获取线程的名称;如果线程代码没有run方法中,在不知道当前线程对象时,可以使用Thread类中的静态方法currentThread方法
5.start
run 方法中用定义线程执行的代码,如果直接调用run方法,则相当于普通方法调用;
start方法用于启动线程,让该线程能够抢占cpu资源而执行;
2.实现Runnable接口;
1.该接口只有一个方法run方法;
2.自定义类实现了该接口重写run方法;在run方法中定义线程要执行的代码;
3.实现了该接口类并不是线程类,只是表示该类的类对象可以作为线程对象的目标来执行;
3.实现Callable接口;该接口中有一个方法call方法;该方法是具有返回值的,如果线程在执行的过程中调用了一个具有返回值的方法,则可以使用该接口创建线程;
3.线程的状态【生命周期】
0.并发:多个线程同时执行;
并行:多个进程同时执行;
1.线程中的优先级,java中每个线程都有优先级,但是优先级高的线程被cpu代用的概率高于优先级低的线程,设置线程的优先级并不能让cpu立即去执行,而是让cpu有更多机会来调度该线程;线程的优先级被分为10个等级,用int类型的1到10表示,10表示最高,1表示最低,5是java默认优先级;
1.Thread类中的方法:
1.static Thread currentThread();//获取此代码所在的方法正在被执行的线程对象;
2.static void sleep(long ms);//执行此代码所在的方法的线程暂时停止执行,等到参数所表示的时间结束才可以执行;
2.object类中的方法:
1.void notify() //唤醒等待的单个线程
2.void notifyAll()//唤醒等待的多个线程
3.void wait() //在某个方法中调用此方法,则会让执行该方法的线程强制等待【cpu则不会调动该线程】,通过1和2的方法唤醒该线程之后才会再次接受cpu的调度;
4。void wait(long timeout)//如果此代码所在的线程被唤醒或者参数所表示的时间结束,则该线程可以
5.线程状态
1.新建:创建线程类的对象之后,线程就处于该状态;
2.就绪【可运行】:新创建的线程对象调用start方法之后那么线程就处于此状态;等待接受cpu调度运行;
3.运行中:cpu正在调度的线程就处于此状态
4.阻塞:暂时停止执行的线程处于该状态;处于此状态的线程在阻塞条件结束之前是不会接受cpu的调度,当阻塞条件结束之后,线程会进入就绪状态等待cpu调度执行
5.死亡【消亡】:当线程所执行的方法中的内容全部执行完毕,该线程就处于此状态;当某个进程中只要有还在执行的线程,则进程不会结束,即使主线程已经运行结束;
6.注意:
1.线程在创建之后,进入就绪状态只能调用一次start方法,如果对同一个线程对象多次调用start方法泽会出现IllegalThreadStateException;
2.如果对一个已经消亡的线程调用start方法,会产生非线程IllegalThreadStateException;


被折叠的 条评论
为什么被折叠?



