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的线程。

      

  • 相关阅读:
    畅通工程(hdu1232)并查集
    qsort函数的用法
    二叉搜索树(hdu3791)
    Binary Tree Traversals(HDU1710)二叉树的简单应用
    Safe Or Unsafe(hdu2527)哈弗曼VS优先队列
    山东省第四届acm解题报告(部分)
    Points on Cycle (hdu1700,几何)
    A计划 hdu2102(bfs一般题)
    杀人游戏(hdu2211)插入法
    hdu1518 Square(dfs)
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/6283411.html
Copyright © 2011-2022 走看看