第一种:Thread类
Thread类代表线程类型。任何线程对象都是Thread类(子类)的实例。Thread类是线程的模板(封装了复杂的线程开启等操作,封装了操作系统的差异性),只要重写run方法即可实现具体线程。
Thread类创建线程
创建一个具体线程,需要继承于Thread类,覆盖run方法(就是更新运行过程),实现用户自己的过程。
class Person1 extends Thread{ @Override public void run() { for(int i=0;i<1000;i++){ System.out.println("你是谁呀!"); } } }
这一种创建线程的方式存在一个弊端:线程与线程要干的事情耦合在一起。
线程的启动
创建线程实例,使用线程实例的strat()方法启动线程,启动以后线程会尽快的去并发执行run方法
Person1 t1=new Person1(); t1.start();
Java虚拟机会去执行重写了的run方法
第二种:Runable接口
创建一个类实现Runable接口,重写run方法。以实现了Runable接口的类的实例对象作为创建Thread类对象的构造函数的参数。
class Person1 implements Runnable{ @Override//实现了Runable接口的run方法 public void run() { for(int i=0;i<1000;i++){ System.out.println("你是谁呀!"); } } }
启动线程
Thread t1 = new Thread(new Person1()); t1.start();
这种创建方式把线程和线程干的事分开了。
t1.Start()执行完后,java虚拟机会尽快的去执行Thread类的run方法。
Thread类的run方法源程序:
@Override public void run() { if (target != null) { target.run(); } }
Target就是传进来的实现了Runable接口的类的实例对象。
内部类实现创建线程
new Thread(){ public void run() { //线程处理逻辑 }; }.start(); new Thread(new Runnable() { @Override public void run() { //线程处理逻辑 } }).start();