多线程的创建,方式一:继承于Thread类 * 1.创建一个继承于Thread类的子类 * 2.重写Thread类的run()-->将此线程的操作声明在run()中 * 3.创建Thread类的子类的对象 * 4.通过子类对象调用start() * * @author zz * @creat 2022-02-26-14:35 */ //1.创建一个继承于Thread类的子类 class MyThread extends Thread { //2.重写Thread类的run() @Override public void run() { for (int i = 0; i < 100; i++) { if (i % 2 == 0) { System.out.println(i); } } } } public class ThreadTest { public static void main(String[] args) { //3.创建Thread类的子类的对象 MyThread thread = new MyThread(); //4.通过子类对象调用start():①启动当前线程 ②调用当前线程的run() thread.start(); //以下操作任然在main线程中执行 for (int i = 0; i < 100; i++) { if(i%2 == 0){ System.out.println(i+"******main()*******"); } } //不能让已经start()的线程再一次执行相同的start(),否则会报IllegalThreadException异常 //若想让已经start()的线程再执行一次,需要重新创建一个线程的对象,然后调用start() MyThread t2 = new MyThread(); t2.start(); } }
/** * 创建多线程的方式二:实现Runnable接口 * 1.创建一个实现了Runnable接口的类 * 2.实现类实现Runnable类中的抽象方法:run() * 3.创建实现类的对象 * 4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象 * 5.通过Thread类的对象去调用start() * * * 比较线程创建的两种方式: * 开发中优先选择实现Runnable接口的方式 * 原因:1.实现的方式没有类的单继承性的限制 * 2.实现的方式更适合于处理多个线程有共享数据的情况。 * 两种方式的联系:Thread也实现了Runnable接口:public class implements Runnable * 相同点:两种方式都需要重写run()方法,将线程要实现的逻辑声明在run()中。 * * @author zz * @creat 2022-02-26-21:24 */ //1.创建一个实现了Runnable接口的类 class MThread implements Runnable { //2.实现类实现Runnable类中的抽象方法:run() @Override public void run() { for (int i = 0; i < 100; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } } public class ThreadTest1 { public static void main(String[] args) { //3.创建实现类的对象 MThread mThread = new MThread(); //4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象 Thread thread = new Thread(mThread); //5.通过Thread类的对象去调用start() thread.start(); //再创建一个线程,遍历100以内的偶数 Thread thread1 = new Thread(mThread); thread1.start(); } }