Day14 多线程通讯

Day14

多线程

线程间通讯

多个线程在处理同一资源,但是任务却不同。

等待唤醒机制

涉及方法

  • wait(): 让线程处于冻结状态,被wait的线程会被存储到线程池中。
  • notify():唤醒线程池中一个线程(任意)。
  • notifyAll():唤醒线程池中所有线程。
    这些方法必须放进同步代码块中,以标识所属的锁。

Lock接口

存在于java.util.concurrent.locks.*中。
把锁封装成了对象,用于替代synchronized系列。

  • Lock的构造函数:ReentrantLock()
  • lock()开始锁 lock()关闭锁
    形式为
    ''lock.lock();
    ''code...
    ''lock.lock();

Condition接口

存在于java.util.concurrent.locks.*中。
把object监视器封装成了对象,替代原来的wait、notify、notifyAll。

wait和sleep的区别

  • wait可以指定时间也可以不指定;
    sleep必须指定时间。
  • wait是Object方法,sleep是Thread方法
  • 在同步中时,对cpu执行权和锁的处理不同。
    wait释放执行权,释放锁。
    sleep释放执行权,不释放锁。

停止线程的方法

  • stop方法
  • run方法结束。run任务中都会有循环结构,只要控制循环,就可以结束任务。

interrupt()

  • 会让线程从冻结状态强制恢复到运行状态中来,使其获得cpu执行资格。
  • 强制动作发生时会产生InterruptedException,要记得处理。

setDaemon()

  • 设定守护线程(后台线程)。
  • 只剩后台线程的时候,JVM就会关闭。

join()

  • 用于临时加入一个线程,主线程要等待该线程执行完才能执行。
  • threadname.join();

setPriority()

  • threadname.setPRiority(Thread.MAX_PRIORITY);
  • 为某个线程设定优先级。

posted on 2017-03-25 22:56  hazelnut  阅读(62)  评论(0)    收藏  举报

导航