• Java多线程的两种实现方式


    Java总共有两种方式实现多线程

    方式1:通过继承Thread类的方式

    package com.day04;
    
    /**
     * 通过继承Thread类并复写run方法来是实现多线程
     * 
     * @author Administrator
     *
     */
    public class ThreadDemo1 extends Thread {
        @Override
        public void run() {
            for (int i = 0; i < 4; i++) {
                // 获取当前线程的名字
                // String threadName = Thread.currentThread().getName(); //方式1
                String threadName = super.currentThread().getName(); // 方式2
                System.out.println(threadName + " print " + i);
            }
        }
    
        public static void main(String[] args) {
            // 创建线程对象
            ThreadDemo1 t1 = new ThreadDemo1();
            ThreadDemo1 t2 = new ThreadDemo1();
            // 调用start方法启动多线程
            t1.start();
            t2.start();
        }
    
    }

    运行结果如下:

    Thread-1 print 0
    Thread-0 print 0
    Thread-1 print 1
    Thread-0 print 1
    Thread-0 print 2
    Thread-0 print 3
    Thread-1 print 2
    Thread-1 print 3

    可以发现总共开启了两个线程,并且两个线程是随机打印出对应的序号,这是因为这两个线程在抢占系统资源是随机的,谁抢到,谁就执行打印语句。

    方式1:通过实现Runnable接口来实现

    package com.day04;
    
    /**
     * 通过实现Runnable接口来实现多线程
     * 
     * @author Administrator
     *
     */
    public class ThreadDemo2 implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 4; i++) {
                // 获取当前线程的名字
                String threadName = Thread.currentThread().getName();
                System.out.println(threadName + " print " + i);
            }
        }
    
        public static void main(String[] args) {
            // 创建线程对象
            ThreadDemo2 t1 = new ThreadDemo2();
            // 调用start方法启动多线程
            new Thread(t1).start();
            new Thread(t1).start();
        }
    
    }

    运行结果如下:

    Thread-0 print 0
    Thread-0 print 1
    Thread-1 print 0
    Thread-0 print 2
    Thread-1 print 1
    Thread-1 print 2
    Thread-1 print 3
    Thread-0 print 3

    可以发现总共开启了两个线程,并且两个线程是随机打印出对应的序号,这是因为这两个线程在抢占系统资源是随机的,谁抢到,谁就执行打印语句。

    总结:

    1.继承Thread类并复写run方法的方式:

    优点:实现简单。

    缺点:因为java是单继承,所以当某个类继承了Thread类,就不能在继承其他的类了。

    2.通过实现Runnable接口的方式

    缺点:实现稍微复杂点。

    优点:因为是通过实现接口的方式,所以它可以再继承其他的类,不存在局限性。

    注意的是:继承Thread如果要获取当前线程的名字可以通过Thread.currentThread().getName()之外,还可以通过super.currentThread().getName()这种方式来获取,而实现接口的方式只能通过Thread.currentThread().getName()这种方式来获取。

  • 相关阅读:
    mybatis两种方式
    js绑定下拉框数据源
    修改 Idea 终端 Terminal 为 GitBash
    git stash使用
    解决百度网盘容量不符,没存进东西但容量变小的问题
    key_load_public: invalid format
    排序算法
    SpringBoot---自动配置原理
    mysql系列——Explain关键字(十)
    mysql系列——开启慢查询日志(十一)
  • 原文地址:https://www.cnblogs.com/nanyangke-cjz/p/7055267.html
Copyright © 2020-2023  润新知