• java多线程


    1、ObjectInputStream

    反序列化。
    (1)构造函数
    ObjectInputStream(InputStream in) 创建从指定的InputStream读取的ObjectInputStream

    (2)主要方法
    Object readObject() 从ObjectInputStream读取一个对象

    2、POI 实现对word、Excel等文件操作

    Apache–Download 安装包,根据操作系统
    例如windows .zip
    导包–build path->configure build path->add external jars

    3、多线程简介

    进程:系统资源分配的单位。(cpu 磁盘 内存 网络)
    线程:独立调度和分配的基本单位,共享进程资源
    一个进程 包含多个线程,用来完成不同的工作,称之为多线程
    进程是为了提高系统资源的利用率和系统吞吐量
    线程是为了减少程序在并发执行时付出的时空开销

    4、线程的使用

    (1)继承 thread 类
    public class Thread extends Object implements Runnable
    a、Thread类构造函数
    Thread()
    分配一个新的 Thread对象

    Thread(String name)
    分配一个新的 Thread对象

    主要方法:
    void run()
    主要是运行线程所负责的主要任务

    void setName(String name)
    将此线程的名称更改为等于参数 name

    void setPriority(int newPriority)
    更改此线程的优先级

    start()
    导致此线程开始执行; Java虚拟机调用此线程的run方法

    void setDaemon(boolean on)
    将此线程标记为 daemon线程或用户线程

    static Thread currentThread() 返回对当前正在执行的线程对象的引用

    b、声明方式:

    public class 线程类名 extends Thread{
    //重写run方法
    public void run(){
    }
    }

    c、调用和开启线程
    线程类名 初始化
    线程类名.start();
    start() 导致此线程开始执行; Java虚拟机调用此线程的run方法

    (2)实现Runnable接口
    Interface Runnable
    void run()
    当实现接口的对象 Runnable被用来创建一个线程
    启动线程使对象的 run在独立执行的线程中调用的方法

    public class 线程名 implements Runnable{
    //实现 run方法
    public void run(){
    }
    }

    a、建立一个类实现runnable的接口
    b、使用参数为Runnable对象的Thread构造方法。–Thread(Runnable target) 分配一个新的 Thread对象
    c、 调用 start方法 开启线程

    5、线程的优先级

    默认的线程优先级:5
    线程优先级最高为:10
    最低的优先级为:1
    优先级指的是一种概率

    6、守护线程

    用户线程:User Thread
    守护线程:Daemon Thread :主要提供服务的,为其他线程。比如 gc 垃圾回收线程
    守护线程主要是在用户线程都执行完的情况下执行,如果没有用户线程执行,守护线程自动退出

    7、窗口卖票小案例

    卖票 是针对同一个票额 同一个票库,两个线程同时访问
    抢占资源,同一张票 卖给多个人
    等待
    保证数据在任何时刻只有一个线程访问,保证数据的完整性

    8、线程的同步

    锁机制
    (1)同步代码块
    static{} {}
    synchronized(){
    //代码
    }—-同步代码块

    (2)同步方法
    synchronized 修饰的方法

    (3)互斥锁
    lock,保证数据的完整性 一山不容二虎
    ReentrantLock
    构造方法–ReentrantLock() 创建一个 ReentrantLock的实例
    主要方法:
    void lock() 获得锁
    void unlock() 尝试释放此锁

    9、线程的wait和notify

    wait:线程等待,直到另一个线程调用该对象的notify()方法或notifyAll()方法
    notify:唤醒正在等待对象监视器的单个线程
    notifyall:唤醒正在等待对象监视器的所有线程
    sleep:long—睡眠时间 Thread类自带的方法—-自然醒
    wait:继承于object的方法—-被叫醒

    10、线程池概述

    多个线程运行时运行机制,包括排队策略 包括线程存活时间,框架策略。
    管理 创建 释放

    11、线程池使用

    ThreadpoolExecutor

    (1)构造方法
    ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue)
    corePoolSize:核心池
    maximumPoolSize:线程池最大线程数
    keepAliveTime:线程没有任务执行时,最多多长时间会终止。>corePoolSize 起作用
    TimeUnit:keepAliveTime的时间单位
    workQueue:用于存放待执行的任务
    ArrayBlockingQueue、LInkedBlockingQueue、SynchronousQueue等
    10个工人 一个工人同时做一个任务;
    10个人都在干活,还有任务来了,任务排队
    活太多,最多招5个人,
    15个人还是赶不过来。放弃任务
    额外找来的5个人,3个月后辞去,还是10个人干活
    corePoolSize:10
    maximumPoolSize:15
    keepAliveTime:3个月

    (2)主要方法
    void execute(Runnable command) 在将来某个时候执行给定的任务
    submit 提交任务
    shutdown:关闭线程池。
    shutdownnow:立即关闭

  • 相关阅读:
    XSS攻击
    逻辑题目
    PHP性能监测的工具介绍
    PHP最简单的后门,且难查,不报毒!
    php Session存储到Redis和memcached的方法
    [sourceTree]这是一个无效的源路径
    Java 解析 Excel 工具 easyexcel
    GoldenGate 将oracle数据抓取到Redis
    JAVA调用ORACLE存储过程时间类型参数没有日期
    mongoDB 分组并对分组结果筛选类似于SQL中的(group by xxx having ) 附带Java代码
  • 原文地址:https://www.cnblogs.com/hsiehchou/p/10403398.html
Copyright © 2020-2023  润新知