线程

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

  创建线程:

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

  

原文地址:https://www.cnblogs.com/zawjdbb/p/6283411.html