多进程:在操作系统中能(同时)运行多个任务(程序)
多线程:在同一应用程序中有多个顺序流(同时)执行
线程(thread)的执行过程
首先生成线程(New),然后进入就绪状态(Runable),和其他线程一起抢占cpu执行的时间。抢到cpu执行的时间后,进入运行状态(Running),在运行过程中cpu执行的时间可能会被其他线程抢占了,该线程则又进入就绪状态,等待下一次抢占cpu执行的时间。线程在运行过程中可能会遇到阻塞事件,解除阻塞状态后则又进入就绪状态。线程代码运行完毕后进入死亡状态(Dead)
创建线程的方法:
① 定义一个线程类,继承Thread类并重写其中的run()方法,run()方法称为线程体。由于java只支持单继承,用这种方法定义的类不能再继承其他类。
class FirstThread extends Thread{public void run(){for(int i = 0;i < 100;i++){System.out.PRintln("FirstThread-->" + i);}}}
class Test{public static void main(String args[]){//生成线程类的对象FirstThread ft = new FirstThread();//启动线程,进入就绪状态,与main线程抢占cpu//ft.run();不能这样写!ft.start();//main线程for(int i =0;i < 100;i++){System.out.println("main-->" + i);}//两个for循环运行在不同的线程当中}}
一旦运行Test类,在程序中存在三个线程:main线程,ft线程,垃圾回收线程。main和ft线程交替运行。多线程运行的结果没有规律,每次结果不同
②定义一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给线程实例,由该目标对象提供线程体。
//定义用于实现接口Runnable的类class RunnableImp implements Runnable{//复写Runnable唯一的方法runpublic void run(){for(int i = 0;i < 10; i++){System.out.println("Runnable-->" + i);}}}
class Test{public static void main(String args[]){//生成RunnableImp的对象RunnableImp ri = new RunnableImp(); //ri代表线程体//将ri传入,生成Thread对象Thread t = new Thread(ri); //t代表一个线程//调用Thread的start方法t.start();}}
新闻热点
疑难解答