Java多线程的创建(一)

  • 方法一:继承Thread类实现

    1.创建一个类A,并继承Thread类

    2.重写A的run()方法

    3.创建A的实例对象b,即创建了线程对象

    4.使用b调用start()方法:启动线程(会自动调用run方法)


例如:

package 多线程;
/*
*1.创建两个线程分别完成100以内奇数偶数的输出
*/

public class CreateThread {
    public static void main(String[] args){
        Test1 t1 = new Test1();
        Test2 t2 = new Test2();
        t1.start();
        t2.start();
    }
}
//输出偶数
class Test1 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if (i % 2 == 0) {
                System.out.println("线程一输出偶数:"+i);
            }
        }
    }
}

//输出奇数
class Test2 extends Thread{
    @Override
    public void run() {
        for(int i =0; i < 50;i++){
            if (i %2 != 0) {
                System.out.println("线程二输出奇数:"+i);
            }
        }
    }
}
线程一输出偶数:0
线程一输出偶数:2
线程一输出偶数:4
线程二输出奇数:1
线程二输出奇数:3
线程二输出奇数:5
	....
线程二输出奇数:47
线程二输出奇数:49
线程一输出偶数:6
线程一输出偶数:8

输出结果省略了一部分,可以看出来,两个线程的执行是交替的,所以奇数和偶数也是交替输出.


  • 方法二:实现Runnable接口

    1. 定义子类A,实现Runnable接口。

    2. 子类中重写Runnable接口中的run方法。

    3. 通过Thread类含参构造器创建线程对象。

    4. 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。

    5. 调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。


例如:

package 多线程;

public class CreateThread2 {
    public static void main(String[] args){
       Test3 t3 = new Test3();
       Test4 t4 = new Test4();

        //多态性
       Thread t = new Thread(t3);
       Thread tt = new Thread(t4);
       t.start();
       tt.start();
    }
}
//输出偶数
class Test3 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if (i % 2 == 0) {
                System.out.println("线程一输出偶数:"+i);
            }
        }
    }
}
//输出奇数
class Test4 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if (i % 2 != 0) {
                System.out.println("线程二输出奇数:"+i);
            }
        }
    }
}
//结果和上一个类似
  • 注意事项

    1. 如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。

    2. run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU 调度决定。

    3. 想要启动多线程,必须调用start方法。

    4. 一个线程对象只能调用一次start()方法启动,如果重复调用了,则将出现异常。

  • 比较两种方法

    1.继承Thread:线程代码存放Thread子类run方法中。

    2.实现Runnable:线程代码存在接口的子类的run方法。

    3.实现方式的好处:

    ​ ①避免了单继承的局限性

    ​ ②多个线程可以共享同一个接口实现类的对象,非常适合多个相同线 程来处理同一份资源

  • 说在最后

    码字不易,感谢支持。水平有限,难免错漏和不准确,欢迎批评指正!

原文地址:https://www.cnblogs.com/coding-996/p/12104570.html