进程

进程:一个程序的运行过程

线程:组成这个程序的并行的模块

一个进程可以包含多个线程。

线程的创建

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口

1.继承Thread类

继承Thread类,重写run()方法,调用start开启线程

public class miloThread1 extends Thread{
	@Override
	public void run(){
		//...
	}
}

线程在主函数中的创建

public static void main(String[] args){
	//创建对象
	miloThread1 = new miloThread11();
	
	//开启线程
	miloThread1.start();
}

线程不一定立即执行,顺序是由CPU安排调度的

2.实现Runnable接口

  1. 定义MyRunnable类实现Runnable接口
  2. 实现run()方法,编写执行体
  3. 创建线程对象,调用start()方法启动线程
public class miloThread2 implements Runnable{
	@Override
	public void run(){
		//...
	}
}
public static void main(String[] args){
	//创建runnable的接口实现类对象
	miloThread2 = new miloThread2();
	
	//创建线程对象,通过线程对象来开启线程 此对象作为代理
	Thread thread = new Thread(miloThread2);
	
	//用代理对象开启线程
	thread.start();
	
	//上面两行代码可简写为
	new Thread(miloThread2).start();
}

区别:runnable需要在创建实现对象后,再创建代理对象,用代理对象开启线程。

两种方法的区别

资源方面

每次利用继承thread创建线程时,都要重新new一个新的xxxthread对象,当多个线程运行时,不同的thread修改的资源不同。

使用runnable接口时,可以保证只new一个runnable对象,且同时有多个线程执行任务。因此,线程之间会操作同一份数据。


继承方面

由于java父子类之间单继承的特性,导致继承得到的thread类无法再去继承其他父类,局限性较大。

而接口具有多继承的特性,一个类可以实现多个不同的接口,因此该类的可实现功能会更多,更方便。

Posted on 2025-10-20 21:16  miloandmicah  阅读(3)  评论(0)    收藏  举报