黑马程序员技术交流社区

标题: suweifeng的笔记9 [打印本页]

作者: suweifeng    时间: 2016-1-18 23:41
标题: suweifeng的笔记9
1.等待唤醒机制:wait()  notify()   notifyall()
  都使用在同步中,因为要对外持有监视器的线程操作
  这些方法在操作同步中线程时,都必须要标识它们所操作线程只有的锁
  只有同一锁上的被等待线程可以被同一锁上notify唤醒
  不可以对不同锁中的线程进行唤醒(锁可以是任意对象)
2.notify在线程池中遵循先进先出原则
  多个线程多个进程while(flag)+notifyAll()
3.lock 接口,condition接口lock接替synchronized,condition替代Object监视器方法
import java.util.consurrent.lock.*;  
private Lock  lock=new Reentranlock();
  private condition_con condition=lock.newCondition();
  private condition_pro condition=lock.newCondition();
public void set(String a,int b) throws InterruptedException
{
lock.lock();
   try{
        while(flag)
                condition_con.await();//等待
        线程语句
`                }
   flag=true;
   condition_pro.signal();//唤醒
}
finally{
        lock.unlock()//释放锁的动作一定要执行
}
}
lock的好处:可以定义多个condition,方便本方只唤醒对方的操作
3.停止线程;run方法结束。多线程运行通常都是循环结构
            控制循环结构,就可以让run方法结束,也就是线程结束
  当线程处于冻结状态,就不会读取标记,线程就不会结束   
  当没有指定的方式让冻结方式恢复到运行状态,这时需要对冻结进行清除
  Interrupt:将处于冻结状态的线程强制唤醒,会发生异常
  catch(InterruptException e){
}
4.线程名.setDaemon:主线程结束后,该语句设定的线程自动结束
5.线程名.join:等待该线程执行完,抢夺CPU执行权,主线程处于冻结状态,
         结束后主线程返回
         t1.start();
         t2.start();
         t1.join();
         t1和t2交替执行,当t1执行完时,主线程返回执行,而不要考虑t2线程
6.优先级(1-10)
  所有线程默认优先级是5
  线程名setPriority(int newPriority)写在括号里面:Thread.MAX_PRIORITY(优先级10)
                                                        Thread.MIN_PRIORITY(优先级1)
                                                      Thread.NORM_PRIORITY(优先级5)
7.Thread.yield();临时释放执行权,写在同步线程函数里面





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2