zoukankan      html  css  js  c++  java
  • 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()这种方式来获取。

  • 相关阅读:
    CSS居中布局
    Dubbo源码学习(二)
    golang实现chunk方式的查询
    吴裕雄--天生自然 PHP开发学习:MySQL 插入数据
    吴裕雄--天生自然 PHP开发学习:连接 MySQL、创建表
    吴裕雄--天生自然 JAVA开发学习:基础语法
    吴裕雄--天生自然 PHP开发学习:高级
    吴裕雄--天生自然 PHP开发学习:多维数组
    吴裕雄--天生自然 PHP开发学习:表单
    吴裕雄--天生自然 PHP开发学习:表单
  • 原文地址:https://www.cnblogs.com/nanyangke-cjz/p/7055267.html
Copyright © 2011-2022 走看看