* 自定义线程的创建方式:
* 方式一:
* 1.自定义一个类继承Thread类。
* 2.重写Thread类的run方法,把自定义线程的任务代码写在run方法上。
* 3.创建Thread的子类对象,并且调用start方法启动一个线程
* 注意:千万不要直接调用run()方法,调用start()方法的时候就会开启,线程一旦开启就会执行run方法中代码,如果直接调用
* run方法,那么就相当于调用了一个普通的方法而已。
* */
运行结果为:
main主定义线程的i0
Thread-0自定义线程的i0
main主定义线程的i1
Thread-0自定义线程的i1
Thread-0自定义线程的i2
Thread-0自定义线程的i3
Thread-0自定义线程的i4
main主定义线程的i2
Thread-0自定义线程的i5
Thread-0自定义线程的i6
main主定义线程的i3
main主定义线程的i4
main主定义线程的i5
main主定义线程的i6
Thread-0自定义线程的i7
main主定义线程的i7
Thread-0自定义线程的i8
main主定义线程的i8
Thread-0自定义线程的i9
main主定义线程的i9
* 方式二:
* 1.自定义一个类实现Runnable接口
* 2.实现Runnable接口的run方法,把自定义线程的任务定义在run方法上
* 3.创建Runnable实现类对象。
* 4.创建Thread类的对象,并且把Runnable实现类的对象作为实参传递
* 5.调用Thread对象的start方法开启一个线程
* */
运行结果为:
main主定义线程的i0
张三自定义线程的i0
main主定义线程的i1
张三自定义线程的i1
main主定义线程的i2
张三自定义线程的i2
main主定义线程的i3
张三自定义线程的i3
main主定义线程的i4
张三自定义线程的i4
main主定义线程的i5
张三自定义线程的i5
main主定义线程的i6
张三自定义线程的i6
main主定义线程的i7
张三自定义线程的i7
main主定义线程的i8
张三自定义线程的i8
main主定义线程的i9
张三自定义线程的i9
/*
* 问题1: 请问Runnable实现类的对象是线程对象吗?
* Runnable实现类的对象并不是一个线程对象,只不过是实现了Runnable接口的对象而已。
* 只有是Thread或者是Thread的子类才是线程对象。(因为Thread里面有start方法)
* 问题2:为什么要把Runnable实现类的对象作为实参传递给Thread对象呢?作用是什么?
* 作用就是把Runnable实现类的对象的run方法作为了线程的任务代码去执行了。
* 推荐使用:第二种。实现Runnable接口的。
* 原因:因为java单继承,多实现。
* */