• 多线程(一)


    在java中,实现多线程方式有两种,继承Thread类和实现Runnable接口,准确的来说有三种,还要一种是实现Callable接口,此文不讲Callable这个。

    1、继承java.lang.Thread

    在创建它的对象时,它们各自执行各自的进程,互不干扰,Thread类当中的数据也是彼此独立。 如下图

    运行结果:

    李四运行10
    张三运行10
    王五运行10
    王五运行9
    王五运行8
    王五运行7
    王五运行6
    王五运行5
    王五运行4
    王五运行3
    王五运行2
    王五运行1
    张三运行9
    李四运行9
    张三运行8
    李四运行8
    张三运行7
    李四运行7
    张三运行6
    李四运行6
    张三运行5
    李四运行5
    张三运行4
    李四运行4
    张三运行3
    李四运行3
    张三运行2
    李四运行2
    张三运行1
    李四运行1

    由上面结果可以看出,多线程运行是无序的,他们各自执行各自的,互不干扰。

    2、实现java.lang.Runnable

    此方法需要重写Runnable接口中的run方法,在创建一个实现Runnable接口的类之后,将这个对象传给多个线程,在执行线程时,调用的是同一个Runnable实现类对象,那么Runnable实现类当中的数据,就是多个线程共享的数据。 如下图

    运行结果:

    李四运行9
    王五运行10
    李四运行7
    张三运行8
    李四运行5
    王五运行6
    李四运行3
    张三运行4
    李四运行1
    王五运行2

     由上面结果可以看出,它们也是无序的,它们一起执行同一个任务。

    注:多线程共享对象会有并发问题

    经过多次运行实现Runnable接口这种方式,会出现如下结果:

    李四运行10
    王五运行10
    张三运行10
    王五运行8
    李四运行9
    王五运行6
    张三运行7
    王五运行4
    王五运行2
    李四运行5
    王五运行1
    张三运行3

    我们在选择有哪种方式实现多线程的时候,根据自己的需求来选择

  • 相关阅读:
    解决使用OCI连接oracle LNK2019: 无法解析的外部符号的问题
    VS2010下配置OCI编程
    OpenLayers简单介绍以及简单实例
    浏览器的标准模式与怪异模式的设置与区分方法
    解决ie7不支持after、before的方法
    ie7兼容after、before的方法
    【移动端适配】适配1个像素的border
    js实现对table的增加行和删除行的操作
    css3线性渐变:linear-gradient
    使用iScroll实现上、下滑动刷新和加载更多数据
  • 原文地址:https://www.cnblogs.com/guochang/p/9522457.html
Copyright © 2020-2023  润新知