线程的介绍

多进程:在操作系统中能(同时)运行多个任务(程序)

多线程:在同一应用程序中有多个顺序流(同时)执行

线程(thread)的执行过程

线程的介绍_第1张图片

首先生成线程(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循环运行在不同的线程当中
	}
}

线程的介绍_第2张图片

一旦运行Test类,在程序中存在三个线程:main线程,ft线程,垃圾回收线程。main和ft线程交替运行。多线程运行的结果没有规律,每次结果不同

 

 

②定义一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给线程实例,由该目标对象提供线程体。

//定义用于实现接口Runnable的类
class RunnableImp implements Runnable{
	//复写Runnable唯一的方法run
	public 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();
	}
}

线程的介绍_第3张图片

 

你可能感兴趣的:(线程)