1 创建方式:
Thread中的的核心方法run, 看如下代码可以知道,1可以继承Thread类后重写这个方法。也可以public Thread(Runnable target) 在创建时传递Runnable类并实现Runnable的run()方法这两种方式 实现继承Thread类 @Override public void run() { if (target != null) { target.run(); } }
其中,Java是单基础多实现体系,使用 extends Thread方式的话,如果我们的类已经继承了一个类,那么就无法在 extends Thread类了,并且使用实现静态代理类方式实现线程创建也能共享资源,(如何共享资源见
线程 静态代理的使用 模拟抢票代码)
因此 建议使用 第二种方式:
public Thread(Runnable target) 在创建时传递Runnable类并实现Runnable的run()方法
2 继承方式创建线程:
/** * 模拟龟兔赛跑 1、创建多线程 继承 Thread +重写run(线程体) 2、使用线程: 创建子类对象 + 对象.start() 线程启动 * * @author Administrator * */ public class Rabbit extends Thread { @Override public void run() { //线程体 for(int i=0;i<100;i++){ System.out.println("兔子跑了"+i+"步"); } } } class Tortoise extends Thread { @Override public void run() { //线程体 for(int i=0;i<100;i++){ System.out.println("乌龟跑了"+i+"步"); } } } public class RabbitApp { /** * @param args */ public static void main(String[] args) { //创建子类对象 Rabbit rab = new Rabbit(); Tortoise tor =new Tortoise(); //调用start 方法 ,启动兔子线程 rab.start(); //不要调用run方法, 相当于 线程准备好了,加入线程组,并告之cpu。等待cpu分配计算资源的那个时间片(兔子在起跑线准备好,等待裁判枪响) //调用start 方法 ,启动乌龟线程 tor.start(); // main主线程中启动一个循环 这样这个进程RabbitApp启动后,里面就会有三个线程,执行后能看到执行结果中每一行所在的时间片内只有这个线程在执行并打印结果 for(int i=0;i<1000;i++){ System.out.println("main==>"+i); } } }
第二种创建方式见: