zoukankan      html  css  js  c++  java
  • 线程

      线程是一个程序内部的顺序控制流。

      创建线程:

        1.定义线程类并实现Runnable接口:(较好,更灵活)

          class Runner implements Runnable{...};

          Runner target = new Runner();

          Thread myThread = new Thread(target); target为runnable接口类型。

          Runnable只有一个run()方法

        2.定义Thread的子类并重写run()方法。

      启动线程:

        start()方法启动线程。

        如果使用run()方法,则是普通的方法调用。

        即start()方法启动线程,子线程和主线程并行运行(轮流执行一部分),run()方法则阻塞运行。

      sleep():让出cpu一定时间。

      join():合并线程,即子线程变成方法调用。

      yield():让出cpu一次。

      线程同步:协调多个线程访问同一份资源。

        使用synchronized(this){...}包含那个资源。

        资源前加synchronized修饰。

      synchronized:锁定。

      线程死锁:

        1锁a,sleep,需要锁b

        2锁b,sleep,需要锁a

        构成死锁。

      解决死锁:

        把锁的粒度加粗,锁定更大对象。

      wait()和sleep()的不同:

        wait()是Object的方法,sleep()是Thread的方法,wait时,别的线程可以访问锁定对象,调用wait方法必须先锁定对象。sleep时,别的线程不可以访问锁定对象。

      notify/notifyAll:

        唤醒wait的线程。

      

  • 相关阅读:
    深入理解ASP.NET Core依赖注入
    Docker Swarm 从入门到放弃
    Asp.net Core全局异常监控和记录日志
    NServiceBus+RabbitMQ开发分布式应用
    NServiceBus+Saga开发分布式应用
    使用NServiceBus开发分布式应用
    springboot自动配置原理
    SpringMVC 源码解析
    instruments symbol name 不显示函数名!
    ld: framework not found FileProvider for architecture arm64
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/6283411.html
Copyright © 2011-2022 走看看