• 并发编程快速入门


    一、概念和开启线程和中断线程

    1、基本概念

     上下文切换就是cpu调度分配时间片用在了在线程状态切换了额,越少越好,自旋锁的意义;

    2、callable接口方式和futureTask结合,获取返回值,和runable的区别就是返回值;

     3、协作式,interrupt不会立即让线程停止,需要慢慢的释放资源等操作,不会终止线程,告诉线程要中断了,线程自己判断和终止;

    如果是sllep后的阻塞状态,调用interrupt会进入就绪状态;

     4、正确中断线程

     java中阻塞方法都会排除InterruptException;

    因为线程调用了interrupt()中断方法被强制唤醒,和sleep()方法冲突,所以报异常;

    最好的写法是判断Thred类的属性 isInterrupt 是否为true,不为true说明还没中断,再执行点任务:

    正在sleep的线程被interrupt后会报interruptException, 并把isInterrupt 置为false; interrupt方法会把isinterrupt置为true:

     二、守护线程和生命周期

    1、守护线程,一些JVM自带线程,和而主线程同生共死,如GC线程等

     普通线程最后会执行finally代码块释放资源等;

    2、线程生命周期

     线程优先级1~10,设置setPriority,越大越优先,但是靠不住;

    yield()方法高风亮节,让出cpu调度,不占用时间片,大家继续竞争cpu调度,当然可能还是自己抢到调度资源cpu时间片;

    3、start()和run()方法

     没有start()方法创建开启线程,那么直接调用run()方法就是普通方法,还是当前main线程执行,调用了另外一个线程对象的普通方法,java一切皆为对象;

    start()方法时候cpu会把这个线程对象映射成一个线程去运行;

  • 相关阅读:
    生成缩略图时报GDI+中发生一般性错误
    跨数据库服务器查询和跨表更新
    javascript,jquery(闭包概念)
    聚集索引和非聚集索引(整理)
    ASP.NET MVC的过滤器
    如何在标题栏title前添加网站logo?
    sql语句执行顺序
    详解ASP.NET MVC的请求生命周期
    在事务中执行批量复制操作SqlBulkCopy,SqlTransaction .
    基于TCP 协议的RPC
  • 原文地址:https://www.cnblogs.com/wmqiang/p/11666666.html
Copyright © 2020-2023  润新知