zoukankan      html  css  js  c++  java
  • 多线程

    进程:

    进程是一个“执行中的程序”。
    程序是一个没有生命的实体,只有在运行时处理器才会赋予它生命,
    才能成为一个活动的实体,我们称其为“进程”。

    线程:

    线程是进程中执行运算的最小单位,是被系统独立调度和分派的基本单位。
    一个进程中可以包含多个线程在执行,这些线程可以共享同属一个进程的
    全部资源。
     

    Jvm进程

    当一个main方法运行之后,就会启用一个jvm进程,而这个进程默认就拥有
    一个主线程,也可以说main方法就是主线程,当main方法结束之后,程序也
    就结束,因此对应的jvm进程也就随之消失
     

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

    1. 继承Thread类,只有继承了Thread类的子类,才可以称之为线程
    2. 实现Runnable接口,实现了Runnable接口的类并不是一个线程,
    它只是一个可以被线程去执行的可运行对象。多个线程可以同时来执行这个对象

    两种方式的区别:

    继承Thread类的线程是各自拥有自己的run方法执行。而实现Runnable接口的类
    是一个可运行的对象,本身并不是线程,它是可以被其他线程共享去执行的,
    因此其他线程都会共享Runnbale对象中的run方法。我们也可以认为一个
    runnable对象就是一个共享资源,它可以被多个线程所共享。

    Java的线程同步:

    当多个线程同时操作一个数据资源时(共享资源),将会导致数据资源错误,
    这就是所谓的线程安全问题。解决办法就是使用线程同步,在Java中线程
    同步可以使用同步代码块或者同步方法(关键字:synchronized)。
    使用synchronized将共享资源锁定之后,那么同一时刻只能有一个线程去操作,
    其他县城都处于等待状态,更确切的说,其他的被调度到一个叫做锁池当中。
    当同步代码块或者同步方法执行完之后,会自动释放这把钥匙,那么锁池中
    的线程将会释放和当前的线程一起去竞争这把key。
     

    线程池

    当任务量非常大的时候,如果每一个任务都开辟一个线程去处理,
    那么这将耗费非常大的资源,降低了服务器的性能,最终将可能
    导致JVM内存溢出,无法处理。这时,我们会考虑采用线程池的机
    制来解决这个问题,所谓的线程池,就是最大限度的使县城重用,
    可以使用少量的线程去处理大量的任务。
    在JDK1.5之后,已经提供了完善的线程池API供我们使用,
    常用的线程池有四种
    1)newFixedThreadPool(固定线程池)
    2) newCachedThreadPool(缓存线程池)
    3) newSingleThreadExecutor(单例线程池)
    4) ScheduledExecutorService(定时线程池)
     
  • 相关阅读:
    浅谈模块化开发
    用gulp搭建并发布自己的cli脚手架
    取值运算符新用法
    vue双向绑定之简易版
    获取对象属性之括号方式
    前端格式化工具之Prettier
    git操作之摘樱桃
    Sort
    MongoDB
    项目使用本地的包
  • 原文地址:https://www.cnblogs.com/BruningHUA/p/6220935.html
Copyright © 2011-2022 走看看