美文网首页Java 杂谈技术干货程序员
多线程(二):实现多线程的两种方式

多线程(二):实现多线程的两种方式

作者: WhyNotYue | 来源:发表于2017-04-16 16:24 被阅读0次

一,多线程的实现方式


方式一: 继承Thread类
/**
 * Created by 阿越 on 2017/4/16.
 */
class myThread extends Thread {
    private String name;

    public myThread(String name) {
        this.name = name;
    }

    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("线程" + name + "输出:" + i);
            try {
                sleep((int) Math.random() * 10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

public class Main {

    public static void main(String[] args) {
        myThread t1 = new myThread("A");
        myThread t2 = new myThread("B");
        t1.start();
        t2.start();
    }

}


方式二: 实现Runable接口(推荐)
/**
 * Created by 阿越 on 2017/4/16.
 */
class myThread2 implements Runnable {
    private String name;

    public myThread2(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("线程" + name + "输出:" + i);
            try {
                Thread.sleep((int) Math.random() * 10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

}

public class Main {

    public static void main(String[] args) {
        new Thread(new myThread2("C")).start();
        new Thread(new myThread2("D")).start();
    }

}

二,两种方式的区别

最根本的区别:一种是继承扩展,而另一种是实现


三,实现Runnable接口比继承Thread类所具有的优势:

  1. 因为Java不支持多继承,但可以多实现,所以实现Runnable接口可以有效避免Java中单继承的限制。
  2. 线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类
  3. 更容易实现线程间资源的共享,以卖书程序(假设书店只剩5本书)举例:

通过方式一继承Thread类来完成:

/**
 * Created by 阿越 on 2017/4/16.
 */
class myThread extends Thread {

    private String name;

    // 只剩5本书
    private int books = 5;

    public myThread(String name) {
        this.name = name;
    }

    public void run() {
        for (int i = 0; i < 5; i++) {
            if (this.books > 0){
                System.out.println("线程" + name + "卖了书,剩下books:" + (--this.books));
            }
        }

    }
}

public class Main {

    public static void main(String[] args) {
        new myThread("A").start();
        new myThread("B").start();
    }

}

运行结果:

Paste_Image.png

分析:启动两个线程来卖书,实际上,每个线程各卖了5本书,两个线程共卖了10本,但事实上书店只有5本书,每个线程都卖自己的书,没有达到资源的共享。

通过方式二实现Runnable接口来完成

/**
 * Created by 阿越 on 2017/4/16.
 */
class myThread2 implements Runnable {

    // 只剩5本书
    private int books = 5;

    public myThread2() {
    }


    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            if (this.books > 0) {
                System.out.println("线程" + Thread.currentThread().getName() + "卖了书,剩下books:" + (--this.books));
            }
        }

    }

}

public class Main {

    public static void main(String[] args) {
        myThread2 mt2 = new myThread2();
        new Thread(mt2, "A").start();
        new Thread(mt2, "B").start();
    }

}

运行结果:

Paste_Image.png

分析:同样是启动两个线程来卖书,但是,因为在线程中共享着同一个mt2(即同一个实现了Runnable接口的myThread2对象),所以即便多个线程在卖书,最后总共也只卖了5本书,达到资源的共享。


最近忙着写项目o(╯□╰)o,通宵达旦的,有段时间没更了,这两天周末偷下懒,写写文,怡怡情。BUG什么的,我不认识~~

相关文章

  • 多线程(二):实现多线程的两种方式

    一,多线程的实现方式 方式一: 继承Thread类 方式二: 实现Runable接口(推荐) 二,两种方式的区别 ...

  • Java-多线程(一)

    NO.1 多线程简介 NO.2 多线程实现方式(一) NO.3 多线程实现方式(二) NO.4 匿名内部类实现线程...

  • Java中的多线程实现方式

    Java中的多线程实现方式 在我们的开发的过程中,常常会碰到多线程的问题,对于多线程的实现方式主要有两种:实现Ru...

  • Java多线程机制——多线程概述

    本文概述 本篇文章将分四块内容对Java中的多线程机制进行介绍:一. 多线程概述二. 实现多线程的两种方式三. 多...

  • Java多线程基础知识(上)

    Java多线程实现多线程的实现有两种方式,第一种是继承Thread类,第二种是实现Runnable类.继承Thre...

  • Java多线程知识点

    1.java中实现多线程的几种方式 java中实现多线程的方式主要有两种,第一种是继承Thread类,第二种是实现...

  • 多线程

    多线程主要考虑的是多个线程对共有资源的冲突!!! 多线程的不确定性! 一、基础概念 实现多线程有两种方式实现Run...

  • 多线程的同步和异步

    多线程的同步和异步 1.创建多线程的方式 有两种方式创建多线程,一种是继承Thread类,一种是实现Runnabl...

  • 【Java并发002】使用层面:线程同步与线程通信全解析

    一、前言 本文介绍Java多线程技术,分为五个部分:多线程的两种实现方式——继承Thread类和实现Runnabl...

  • Java多线程的使用通信和控制

    Java多线程的使用通信和控制 1. Java多线程的使用和通信 实现多线程有两种方式 1. 继承Thread父类...

网友评论

    本文标题:多线程(二):实现多线程的两种方式

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