当前位置: 首页 > news >正文

17 线程的创建

进程

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

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

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

线程的创建

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

1.继承Thread类

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

public class miloThread1 extends Thread{@Overridepublic 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{@Overridepublic 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类无法再去继承其他父类,局限性较大。

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