Java多线程系列一——Java实现线程方法

Java实现线程的两种方法

继承Thread类

实现Runnable接口

它们之间的区别如下:

1)Java的类为单继承,但可以实现多个接口,因此Runnable可能在某些场景比Thread更适用

2)Thread实现了Runnable接口,并且有更多实用方法

3)实现Runnable接口的线程启动时仍然需要依赖Thread或者java.util.concurrent.ExecutorService

import java.util.Map;

import java.util.concurrent.ConcurrentHashMap;

import org.junit.Assert;import org.junit.Test;

/** * @Description: 线程的两种实现方法

*/

publicclass ThreadImplementTest {

    privateMap map =newConcurrentHashMap<>();

    classMethodOneextends Thread {

        privateintcount = 0;

        @Override

        publicvoid run() {

            map.put(++count,this.getId());

        }

    }

    classMethodTwoimplements Runnable {

        privateintcount = 0;

        @Override

        publicvoid run() {

            map.put(++count, Thread.currentThread().getId());

        }

    }

    @Test

    publicvoid textThread() {

        /**        * 方法一:继承Thread

        */        MethodOne extendsThread =new MethodOne();

        extendsThread.start();

        /**        * 方法二:实现Runnable

        */        MethodTwo implementsRunnable =new MethodTwo();

        new Thread(implementsRunnable).start();

    }

    @Test

    publicvoidtestTwoRuns()throws InterruptedException {

        /**        * 注意:以下两种方法启动方式截然不同

        */        Thread tmp;

        MethodOne extendsThread =new MethodOne();

        for(inti = 0; i < 3; i++) {// 只有一个线程tmp =new Thread(extendsThread);

            tmp.start();

            tmp.join();

        }

        Assert.assertTrue(map.containsKey(3));

        Assert.assertTrue(map.containsKey(2));

        Assert.assertTrue(map.containsKey(1));

        map.clear();// 清空缓存for(inti = 0; i < 3; i++) {// 三个不同线程tmp =new MethodOne();

            tmp.start();

            tmp.join();

        }

        Assert.assertEquals(1, map.size());

        Assert.assertTrue(map.containsKey(1));

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    胜浩_ae28阅读 10,539评论 0 23
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 10,196评论 1 114
  • 上一篇,我们给出了大概35个题目,都是基础知识,有童鞋反映题目过时了,其实不然,这些是基础中的基础,但是也是必不可...
    独念白阅读 1,696评论 0 2
  • 一. Java基础部分.................................................
    wy_sure阅读 9,273评论 0 11
  • 一世修行苦与乐 关注 1.598 · 字数 980 · 阅读 147 2018-11-14 10:44 图片发自简...
    无限间心阅读 2,615评论 0 0