zoukankan      html  css  js  c++  java
  • Java

    Java - 多线程
        > 线程的两种实现方式:
            > 继承(extends) Thread 类
            > 实现(implements) Runnable 接口
        > 继承与实现的区别和联系
            > public class Thread implements Runnable
            > 实现避免了java中单继承的局限性,所以最好用实现的方式实现多线程(比如在多个线程操纵同一个
               资源的情况,使用实现接口方式只需要 new 一个对象就可以了)
        > 使用多线程的优点:
            1、提高程序执行速度,对图形化界面更有意义,可增强用户体验
            2、提高计算机系统CPU的利用率
            3、改善程序结构,将既长又复杂的进程分为多个线程,独立运行,利于理解和修改
     
    一、线程的分类:
        > 用户线程
        > 守护线程:用它来服务用户线程的,通过在start()方法前调用thread.setDaemon(true)可以把一个用
           户线程编程守护线程, Java垃圾回收机制就是典型的守护进程
        > 若 JVM 中都是守护进程,则当前 JVM 将退出
     
    二、线程的生命周期
    1、新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
    2、就绪:处于新建状态的线程被 start() 之后,将进行线程队列等待 CPU 时间片,此时已具备运行条件
    3、运行:当就绪的线程被调度并获得处理器资源时,进入运行状态,run() 方法定义了线程的操作和功能
    4、阻塞:被人为挂起或执行输入输出操作时,让出CPU 并临时中止自己的执行,进入阻塞状态
    5、死亡:线程完成了他的全部工作或线程被提前强制性的中止
        > 图示
            
     
     
    三、线程的同步机制
    1、方式一:同步代码块
        > Synchronized的使用方法:
        synchronized(同步监视器){
            // 操作共享资源的代码(被同步的代码块)
        }
            > 同步监视器:由一个类的对象来充当,哪个线程获取此监视器,哪个线程就可以执行大括号里的代码
     
    2、方式二:同步方法
        > 将操作共享数据的方法声明为 synchronized,即此方法为同步方法,能够保证当其中一个线程执行
           此方法时,其他线程在外等待直至此线程执行完此方法
     
    四、线程通信
        > wait():令当前线程挂起并放弃CPU、同步资源,使别的线程可访问并修改共享资源,而当前线程排队
                        等候再次对资源的访问 
        > notify() :唤醒正在排队等待同步资源的线程中优先级最高者结束等待
        > notifyAll():唤醒正在排队等待资源的所有线程结束等待
        > java.lang.Object 提供的这三个方法只能在 synchronized 方法或 synchronized 代码块中才能使用,否
           则会报 java.lang.illegaMonitorStateException 异常
  • 相关阅读:
    org.apache.maven.archiver.MavenArchiver.getManifest错误
    常见电商项目的数据库表设计(MySQL版)
    二、Log4j基本使用方法
    Java Dao设计模式
    JavaBean简单及使用
    jsp的9个内置对象
    JSP+MySQL实例
    JSP指令--include指令(静态包含)
    三种Scriptlet总结
    ***mysql 用一个表的一列,去更新另一表的一列
  • 原文地址:https://www.cnblogs.com/kafeibuku/p/4988307.html
Copyright © 2011-2022 走看看