• javase线程(线程与进程、线程的实现方式、线程并发库、线程池)


    1、线程与进程的区别

    进程:

    (1)拥有资源的基本单位。

    (2)可独立调度和分派的基本单位。

      (3)  开销较大

    线程:

    (1)线程本身拥有少量资源,它可以共享所属进程的资源。

    (2)独立运行和调度的基本单位。

    (3)轻量级的进程,开销小

    2、线程与进程的关系

    一个进程中同时存在几个执行体。单线程是按照函数的顺序执行,多线程是多段代码同时交替运行。CPU的一个核,在某一时刻只能执行一个线程,CPU在多个线程之间快速地切换(线程的调度算法)。

    3、线程的实现方式

    (1)继承Thread接口:

    class Mythread extends Thread {
        public void run(){
             System.out.println("我是一个线程!!");
        }
        public static void main(String args[]){
            Thread thread=new Thread(new Mythread());
            thread.start();//启动,执行的是run方法
        }
    }

    (2)实现Runnable接口:

    class Mythread implements Runnable {
       public void run(){
           System.out.println("线程执行了!!");
       }
       public static  void  main(String args []){
           Thread thread=new Thread(new Mythread());
           thread.start();
       }
    }

    (3)两种实现方式的对比:

    以实现Runable接口的方式创建线程比继承Thread类有很大的优越性,因为类不能多重继承,即一个类只能继承一个类,那么如果该类已经继承了一个类,就不能实现多线程了,但是可以通过实现Runable接口的方式实现多线程。

    4、线程并发库

    (1)简介:

    JDK5中增加了Doug Lea的并发库,这一引进给Java线程的管理和使用提供了强大的便利性,java.util.current包中提供了对线程优化、管理的各项操作,使得线程的使用变得得心应手,该包提供了线程的运行,线程池的创建,线程生命周期的控制。

    (2)线程池:

    分类:

    newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需求可灵活回收空闲线程,若无可回收,则新建线程
    newFixedThreadPool:创建一个定长线程池,可控制线程的最大并发数,超出的线程会在线程池中等待。
    newScheduleThreadPool: 创建一个定长线程池,支持定时及周期性任务处理
    newSingleThreadScheduledExecutor:创建一个单线程化的线程池,他只用唯一的工作栈来执行任务

    使用:

    class Mythread implements Runnable {
       public void run(){
           System.out.println(Thread.currentThread().getName());
       }
       public static  void  main(String args []){
               ExecutorService executorService = Executors.newFixedThreadPool(3);//// Executors:线程池创建工厂类,调用方法返回线程池对象
               executorService.submit(new Mythread());
               executorService.submit(new Mythread());
               executorService.submit(new Mythread());
           }
    }
    pool-1-thread-1
    pool-1-thread-2
    pool-1-thread-3

    好处:

    限制线程的个数,不会导致由于线程过多导致系统运行缓慢,甚至崩溃

    节省了资源:我们用两种方式创建的线程,在使用后都会被销毁,频繁地创建和销毁会造成时间和资源的浪费。线程池是一个能够容纳多个线程的容器,里面的线程可以反复使用。

  • 相关阅读:
    python基础之函数v1
    Python之基础函数
    python 文件操作之指针v1
    python 文件之指针操作
    文件操作
    Eclipse报错:添加server tomcat8.0 The Apache Tomcat installation at this directory is version 8.5.43. A Tomcat 8.0 installation is expected.
    Eclipse报错:pom.xml第一行org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration) pom.xml /xxx line 1 Maven Config
    React Native开发IDE之WebStorm安装及配置(Windows)
    React Native 报错:Unable to load script from assets 'index.android.bundle'
    React Native 报错:The module `./index.android` could not be found from
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12459194.html
Copyright © 2020-2023  润新知