- 继承Thread并重写run方法
线程1
class MyThread1 extends Thread{ /** * run方法用来定义线程要执行的任务 */ @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println("你是谁啊?"); } } }
线程2class MyThread2 extends Thread{ @Override public void run() { for(int i=0;i<1000;i++){ System.out.println("我是查水表的!"); } } }
线程测试:public class ThreadDemo1 { public static void main(String[] args) { /* * 启动线程应当使用线程的start方法,而不是 * 直接调用run方法。 * start方法会快速的执行完毕,作用是将线程 * 纳入线程调度,使其具有并发执行的能力. * 一旦线程获取CPU时间片开始运行时,会自动 * 调用自己的run方法. * 需要注意,在概念上不能理解为调用start方法 * 时run方法被执行,而是start方法执行完毕后 *该线程的run方法会很快的被执行(一旦获取时间片) */ MyThread1 t1 = new MyThread1(); MyThread2 t2 = new MyThread2(); t1.run(); t2.run(); // t1.start(); // t2.start(); } }
注意点:线程启动应调用其start法,如果直接调用run方法会使线程失去并发执行能力。- /**
* 方式一创建线程的优点:
* 定义简单,适合匿名内部类快速创建线程
*
* 缺点:
* 1.由于java是单继承的,这就导致继承了Thread就不能
* 在继承其他的类,在项目中拓展性差。
* 2.由于将线程执行的任务定义在线程的run方法中,导致
* 线程与任务有一个强耦合关系,不利于线程重用.
*/