JAVA高级复习-多线程创建方式一

一、多线程创建

可以通过两种方式创建多线程。

方式一:继承Thread类

1、创建一个继承于Thread类的子类
2、重写Thread类的run() --> 将此线程执行的操作声明在run()中
3、创建Thread类的子类的对象
4、通过此对象调用start()

/**
 * @description:多线程的创建:两种方式
 * @date: 2020/7/25 10:32
 * @author: winson
 */
public class CreateThread {
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        t1.start();
        //如果直接调用父类的run方法,并不会开启新线程,还是在mian线程中执行方法;
        //问题一:我们不能通过直接调用run方法的方式启动线程;
        //t1.run();

        //问题二:再启动一个线程,遍历50内的偶数,不可以还让已经start()的线程去执行,会报java.lang.IllegalThreadStateException异常
        //我们需要重新创建一个线程的实例对象;
        MyThread t2 = new MyThread();
        t2.start();
        for (int i = 0; i < 50; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
        }
    }
}

/**
 * 方式一:继承Thread类
 * 1、创建一个继承于Thread类的子类
 * 2、重写Thread类的run() --> 将此线程执行的操作声明在run()中
 * 3、创建Thread类的子类的对象
 * 4、通过此对象调用start()
 */

class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
        }
    }
}

start()方法的作用:1、使该线程开始执行;2、Java 虚拟机调用该线程的 run()方法。如果直接调用父类的run()方法,此不会开启新线程,还是在mian()线程中执行方法;

总结:

问题一:我们不能通过直接调用run()方法的方式启动线程;如果直接调用父类的run()方法,并不会开启新线程,还是在mian()线程中执行方法;

问题二:再启动一个线程,遍历50内的偶数,不可以还让已经start()的线程去执行,会报java.lang.IllegalThreadStateException异常, 我们需要重新创建一个线程的实例对象;

posted @ 2020-07-25 10:58  温森  阅读(121)  评论(0编辑  收藏  举报