美文网首页程序员地瓜哥的小屋
Java中的线程创建和启动

Java中的线程创建和启动

作者: CodingDGSun | 来源:发表于2021-07-04 11:58 被阅读0次

    Java使用Thread类代表线程,所有的线程对象都必须是Thread类或者其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码)。Java使用线程执行体来代表这段程序流。


    继承Thread类创建线程类

    通过继承Thread类来创建并启动多线程的步骤如下:

    • 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。因此把run()方法称为线程执行体。
    • 创建Thread子类的实例,即创建了线程对象。
    • 调用线程对象的start()方法来启动该线程。
    public class MyThread extends Thread {
        @Override
        public void run() {
            for (int i = 1; i <= 5; i++) {
                //返回当前线程的名字
                System.out.println(Thread.currentThread().getName() + " " + i);
            }
        }
    
        public static void main(String[] args) {
            for (int i = 1; i <= 6; i++) {
                //获取当前线程的名字
                System.out.println(Thread.currentThread().getName() + " " + i);
                if (i == 3) {
                    //创建第一个线程
                    MyThread thread1 = new MyThread();
                    //启动第一个线程
                    thread1.start();
    
                    //创建第二个线程
                    MyThread thread2 = new MyThread();
                    //启动第二个线程
                    thread2.start();
                }
            }
        }
    }
    
    /*
        //输出结果:
        main 1
        main 2
        main 3
        main 4
        main 5
        main 6
        Thread-1 1
        Thread-0 1
        Thread-1 2
        Thread-0 2
        Thread-1 3
        Thread-0 3
        Thread-1 4
        Thread-0 4
        Thread-1 5
        Thread-0 5
     */
    
     //或者
    
     /*
        //输出结果:
        main 1
        main 2
        main 3
        main 4
        main 5
        main 6
        Thread-0 1
        Thread-1 1
        Thread-0 2
        Thread-1 2
        Thread-0 3
        Thread-1 3
        Thread-0 4
        Thread-1 4
        Thread-0 5
        Thread-1 5
    */
    
    
    其中,第一个线程和第二个线程的执行顺序,每次运行先后顺序可能不一定相同,得根据虚拟机的线程调度器的调度。

    实现Runnable接口创建线程类

    实现Runnable接口来创建并启动多线程的步骤如下:

    • 定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
    • 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
    public class MyThread implements Runnable {
        @Override
        public void run() {
            for (int i = 1; i <= 5; i++) {
                //返回当前线程的名字
                System.out.println(Thread.currentThread().getName() + " " + i);
            }
        }
    
        public static void main(String[] args) {
            for (int i = 1; i <= 6; i++) {
                //获取当前线程的名字
                System.out.println(Thread.currentThread().getName() + " " + i);
                if (i == 3) {
                    //创建Runnable的实例:MyThread
                    MyThread myThread = new MyThread();
    
                    //创建第一个线程,并将Runnable的实例:MyThread,作为Thread的target来创建Thread对象
                    Thread thread1 = new Thread(myThread, "第一个线程");
                    //启动第一个线程
                    thread1.start();
    
                    //创建第二个线程
                    Thread thread2 = new Thread(myThread, "第二个线程");
                    //启动第二个线程
                    thread2.start();
                }
            }
        }
    }
    
     /*
        //输出结果:
        main 1
        main 2
        main 3
        main 4
        main 5
        main 6
        第一个线程 1
        第二个线程 1
        第一个线程 2
        第二个线程 2
        第一个线程 3
        第二个线程 3
        第一个线程 4
        第二个线程 4
        第一个线程 5
        第二个线程 5
    */
    
    //或者
    
    /*
        //输出结果:
        main 1
        main 2
        main 3
        main 4
        main 5
        main 6
        第二个线程 1
        第一个线程 1
        第二个线程 2
        第一个线程 2
        第二个线程 3
        第一个线程 3
        第二个线程 4
        第一个线程 4
        第二个线程 5
        第一个线程 5
    */
    
    其中,第一个线程和第二个线程的执行顺序,每次运行先后顺序可能不一定相同,得根据虚拟机的线程调度器的调度。

    相关文章

      网友评论

        本文标题:Java中的线程创建和启动

        本文链接:https://www.haomeiwen.com/subject/qxueultx.html