zoukankan      html  css  js  c++  java
  • JAVA线程的一些笔记

    1.线程不能单独运行 必须要程序中运行 线程是程序内部的顺序控制流

    2.多线程指的是在单个程序中 可以运行运行多个不通的线程来执行多个不同的任务

    3.操作系统不把每个线程当独立的进程对待

    4.线程和进程都是顺序执行的指令序列 但两者间有区别

    进程是一个实体 每个进程都有自己独立的状态 自己的专用数据段 创建进程时 必须建立或复制其专用数据段

    线程则是共享数据段 同一个程序中的所有线程只有一个数据段 避免了无谓的数据复制 因此线程的建立和线程间的切换速度大大优于进程

    线程具备进程的大多数有点 但是由于多个线程共享一个数据段 所以 数据访问过程的互斥和同步问题 使得系统管理功能变得相对复杂

    5.许多编程语言需要用外部的线程软件包来实现多线程 尔JAVA则内在支持多线程 它的所有类都是在多线程的思想下定义的

    6.关于JAVA中线程的相关概念:
    1.在多线程系统中,每个线程都富裕一个执行优先级 优先级决定了线程被CPU执行的优先程序 优先级高则比优先级低的线程更多的执行时间

    2.多个线程的并发执行是通过一个调度程序来进行调度的。

    3.线程调度指的是在各个线程之间分配CPU资源。线程调度有两种模型:抢占式和分时模型

    4.分时模型:CPU资源是按照时间片来分配的.获得CPU资源的线程只能在指定时间片内执行.一旦时间片用完就必须把CPU让给另一处于就绪的线程(时间分配);
    在分时模型中,线程本身不会让出CPU。
    5.抢占式模型:如果在一个低优先级的线程执行过程中,又有一个高优先级的线程准备就绪,那么低优先级的线程就把CPU资源让给高优先级的线程。

    6.为了使低优先级的线程有机会运行,高优先级的线程应该不时地主动进入睡眠状态(sleep)

    7.在JAVA中,线程可以共享数据,这就产生了同步的问题。假如两个线程A和B同时访问一个数据对象。线程A读这个数据对象而线程B写这个数据对象,

    8.JAVA线程的五个状态:

    新建状态(new):已分配内存空间,私有数据已被初始化 可随时被调度成可运行状态 也可被杀死而变成停止状态

    就绪或可运行状态(runnable):正等待CPU资源 随时可被调度执行 处于就绪状态 何时执行取决于该线程的优先级和就绪队列的状况

    运行状态(running):运行状态表明线程正在运行,该线程已拥有对CPU的控制权。除非该线程主动放弃CPU控制权 或被优先级更高的线程抢占,否则一直到运行结束
    PS:处于运行状态的线程在下列情况下将让出CPU控制权:
    ·线程运行完毕;
    ·有比当前进程优先级更高的线程处于可运行状态;
    ·线程主动睡眠一段时间;this.sleep()
    ·线程在等待某一资源;this.wait()
    挂起状态(blocked):如果一个线程处于挂起状态,那么这个线程暂时无法进入就绪队列。需要某些事件才能唤醒,至于由睡眠事件唤醒,则取决于其挂起的原因。
    PS:
    ·处于睡眠状态的线程等待睡眠结束就变成可运行状态;
    ·因等待资源或消息而被挂起的线程则需要由一个外来事件唤醒;

    停止状态(dead):表示线程已退出运行状态,并且不再进入就绪队列。
    PS:可能进程被强行杀死;可能线程执行完毕

  • 相关阅读:
    关于Java的代理模式
    关于Java串行、并行执行——使用Callable多线程
    关于区域表system_district:省市县街道四级地址表
    关于MongoDB在windows下安装
    关于Eureka 服务注册列表显示IP问题研究
    关于开发APP接口版本不兼容的问题
    关于MySQL创建数据库字符集和数据库排序规则的对比选择
    关于MySQL的行转列
    关于MySQL统计一列中不同值的数量方法
    关于Java 8 forEach
  • 原文地址:https://www.cnblogs.com/ysbl/p/3506296.html
Copyright © 2011-2022 走看看