• 线程同步


    线程同步

    同步代码块

    synchronized(监视器){

    //共同享用的代码块

    }

    多个线程在抢夺cpu执行权,在执行run()方法,遇到synchronized代码块时,会检查是否有锁对象,如果有,就继续执行下去。反则,该线程就会进入阻塞状态。直到锁对象被释放,多个线程就会继续抢夺cpu执行权。

    Object obj = new Object();//监视器

    public void run() {

               while(true){
                   synchronized (obj){
                       if(tickets>0) {
                           System.out.println(Thread.currentThread().getName() + "-->" +"正在出售第"+tickets+"票");
                           tickets--;
                      }
                  }

              }

      }

    同步方法

    1.把共同访问的数据总结抽取出来,放进一个方法里面。

    2.格式是 :修饰符 synchronized 返回值类型 方法名(参数列表){

    //共享的数据;

    }

    public void run() {

           while(true){
               sell();
          }

      }

       public synchronized  void sell(){
           synchronized (obj){
               if(tickets>0) {
                   System.out.println(Thread.currentThread().getName() + "-->" +"正在出售第"+tickets+"票");
                   tickets--;
              }
          }
      }

    使用lock锁

    步骤:

    1.在成员位置创建一个ReentrantLock对象

    2.在可能出现线程安全代码前调用:ReentrantLock的lock()方法。

    注:将可能出现线程安全代码放进try{}中

    3.在finally{}中调用unlock()

         Lock r =  new ReentrantLock();//1.在成员位置创建一个ReentrantLock对象
       @Override
       public void run() {

           while(true){
              r.lock();
              try{
                  if(tickets>0) {
                      System.out.println(Thread.currentThread().getName() + "-->" +"正在出售第"+tickets+"票");
                      tickets--;
                      }
                }
              finally {
                  r.unlock();
                  }

          }

     

  • 相关阅读:
    linux下RTP编程(使用JRTPLIB)(转)
    omap 移植qt4.7.0
    mknod指令详解
    mplayer 在线播放错误
    移植Mplayer到OK6410开发板
    海量数据处理算法—Bit-Map
    海量数据面试题----分而治之/hash映射 + hash统计 + 堆/快速/归并排序
    并行、并发、同步和互斥
    阿里巴巴集团2014年校园招聘北京笔试题
    动态规划之矩阵连乘
  • 原文地址:https://www.cnblogs.com/stydejava/p/13436748.html
Copyright © 2020-2023  润新知